日期:2014-05-19  浏览次数:20412 次

Session的菜鸟问题
//登录页面窗口判断如下:
if(管理员登录验证通过)
Session[ "adminID "]= "admin ";


//那么其它需要管理员权限的窗口是不是可以这样:
if(Session[ "adminID "]!=null)
执行功能;
else
response.redirect( "Login.aspx ");


问题:
上面的验证有没有安全漏洞?
据说Session是放在Cookie里头的,那么用户如果自己在Cookie里头设置adminID的值,那不是就挂了?任何人都可以当管理员?
对Session了解不多,请大侠指教!谢谢了。

------解决方案--------------------
你没有理解Session的工作原理...

当生成一个Session时,服务器会在内存中维护这个Session变量,并产生32位(64位)唯一SessionID,然后这个id通过Set-Cookie头信息发给浏览器,于是浏览器就在Cookie头信息中保存SessionID.

当浏览器与服务器交互时(比如你点了一个链接),浏览器会把SessionID发回给服务器,服务器查看这个SessionID,找出对应的Session变量值.

Cookie与Session的不同就在于一个变量值是保存在客户端,一个是保存在服务器端.

因为Session在客户端就一个id而已,并没有实际值,所以不用担心会被更改...

当然,如果别人通过嗅探器,获取了你的SessionID,那么他可以盗用你的SessionID来与服务器通信,为了防止这种情况,你得采用SSL协议(Https).

伪造Session一般不可能,现在的Web服务器,Apache,IIS基本都不可能被伪造SessionID.