不仅能劫持sessionid,连整个session都能获得。
[quote=引用 46 楼 I_LOVE_YS 的回复:] 大家都讨论,让我得出一个结论: 就是不能在session中存储用户名和密码。 以前,我为了保存用户登录状态,都是在 登录时把用户名和密码保存到session中。 每一次请求时从session中取出再新验证。 这样做的风险是,一旦黑客劫持了session. 用户名和密码他就得到了。就可以为所欲为了。 解决方案就是不存用户名密码了。 比如存一个session['vaild-user']=true.
题主所说的确实是有可能的,因为http请求是无状态的,所以简单的web应用都是用一个sessionId(服务端随机生成)来验证(或者说仅仅就是区分)这个用户是谁,http请求是明文传输,所以黑客只要劫持到任何一个带有sessionId的请求(比如你连接了黑客的wifi),那么他就可以得到这个sessionId,从而伪装成合法的用户,去非法请求服务端的资源。 如何防止sessionId被劫持:我觉得有以下几个办法。 1、动态加密:为什么说要动态加密,因为如果你每次请求的凭证都是一样的(不管你用多复杂的加密算法),黑客根本不需要解密,只需要获得这个凭证(比如加密后的sessionId),用这个凭证去请求就行了,因为你的凭证是不变的。所以一个可行的做法是,服务端首先为你分配一个公钥和密匙,每次请求时,用请求的参数+请求的URL+服务端返回的密匙+当前时间做一个简单的加密(或者仅仅就是md5),然后再带上公钥,服务端根据公钥获取你对应的密匙,做相应的加密处理,然后对比凭证是否一致,即可以判断是否为合法的请求,这样的做法在很多第三方的平台服务很常见,比如百度云推送的签名算法之类的。 2、使用https:其实https的原理和上面这个方法类似,首先浏览器和服务器会进行一次握手,用于确定之后通信的加密算法以及相应的公钥和密匙,之后使用对称加密算法,将请求的所有信息进行加密然后进行传输,这里注意的是https是全密文传输,也就是说即使黑客劫持到了请求,如果他没有密匙(而密匙是在第一步的握手信息中产生的),几乎是没有可能解密的,从而他也没办法伪装合法用户。
HTTP是不安全的,如果安全性要求高,可以用HTTPS
获取sessionid后如何假冒攻击?简单点就可以把当前要攻击站点的cookie值的asp.net_sessionid设置为偷来的值,然后去访问就行了,用.net的post客户端方法可以填充更多信息,例如来源或一些其他cookie,点击按钮事件等.
81,090
社区成员
341,731
社区内容
加载中
试试用AI创作助手写篇文章吧