COOKIE中的ASPSESSIONID的问题
我做一个ASP登录网站(不是ASP.NET),登录前的SessionID和登录后的SessionID不同,为的是防止攻击者跟踪SessionID来达到冒充登录的目的。这个...
我做一个ASP登录网站(不是ASP.NET),登录前的SessionID和登录后的SessionID不同,为的是防止攻击者跟踪SessionID来达到冒充登录的目的。
这个我通过在登录界面使用Session.Abandon()清除Session对象,跳转到登录后的主页面会自动生成新的SessionID,之后再把需要的数据取得放入新Session中就达到了虽然登录前后SessionID变化,但仍然可以正常登录的问题。
程序DEBUG时,SessionID确实变化了,但是我用Fiddler来测试时发现,COOKIE中的ASPSESSIONID却一直没有变化。
问题1:是不是这样的话即使SessionID发生变化,攻击者也可以通过假冒COOKIE中的ASPSESSIONID来达到登录网站的目的?
问题2:SessionID的变化就变得没有意义了呢?还是仍然可以防止SessionID的跟踪?
这是最近一个工作上要对应的问题,看了很多资料,还是有点不大明白,希望高手多来指教,请不要复制粘贴,因为网上的很多资料我都已经看过,需要的是您睿智的见解。
再次感谢cg329521这么详细的回答,理论上我也是这么认为的,可就是在用Fiddler来调试经典ASP程序时,按理论来说新生成一个SessionID,对应的也该生成一个新的ASPSESSIONID才对,但用Fiddler测到的ASPSESSIONID却一直不变化,除非关掉浏览器再开才会变化,就这个一直很困扰,从而对看到的理论产生质疑。提问时间还有些,看到的话,能再回答一次吗?谢谢 展开
这个我通过在登录界面使用Session.Abandon()清除Session对象,跳转到登录后的主页面会自动生成新的SessionID,之后再把需要的数据取得放入新Session中就达到了虽然登录前后SessionID变化,但仍然可以正常登录的问题。
程序DEBUG时,SessionID确实变化了,但是我用Fiddler来测试时发现,COOKIE中的ASPSESSIONID却一直没有变化。
问题1:是不是这样的话即使SessionID发生变化,攻击者也可以通过假冒COOKIE中的ASPSESSIONID来达到登录网站的目的?
问题2:SessionID的变化就变得没有意义了呢?还是仍然可以防止SessionID的跟踪?
这是最近一个工作上要对应的问题,看了很多资料,还是有点不大明白,希望高手多来指教,请不要复制粘贴,因为网上的很多资料我都已经看过,需要的是您睿智的见解。
再次感谢cg329521这么详细的回答,理论上我也是这么认为的,可就是在用Fiddler来调试经典ASP程序时,按理论来说新生成一个SessionID,对应的也该生成一个新的ASPSESSIONID才对,但用Fiddler测到的ASPSESSIONID却一直不变化,除非关掉浏览器再开才会变化,就这个一直很困扰,从而对看到的理论产生质疑。提问时间还有些,看到的话,能再回答一次吗?谢谢 展开
5个回答
展开全部
aspsessionid是一个身份证号也可以是临时的他是写在客户端的但实际还有一个服务器端的id与之比较,也就是验证,但他有生命周期的,在abandon后服务器端的id就没有了就算客户端还有但没有了与之比较的对象,但如果你说的你怕在生命期内客户端的sessionid就被偷走可以在异地验证,存在这种可能!!!但真的发生里这种情况的话,你人为的生成另一套sessionid也没有因为在运行的时候客户端的id就被偷走了,客户端弱谁也拦不住,好办法是加一个只能一个用户在线的验证,如果一个用户已登录那么是不允许相同用户名登录的,这样可以解决你说的问题。
-----------------------------
生成新的sessionid的话,服务器新生成了新的,随之你客户端也生成新的aspsessionid与之对应就像一把锁有两个钥匙,一把在服务器端,一把在客户端,要验证的时候把两把钥匙对一起,一样就ok不一样就end。就算你新生成了新的session也是需要往客户端写入新的aspsessionid,进行比对,所以新不新没有意义的,这就是session的工作机制,如果禁用了cookies不让往客户端写东西的话,session也就失效了,这就是为什么客户端必须要允许cookies写入session才能生效的原因。因为客户端不让写入的话,服务器端的钥匙将没有比对的对象,不知道我说明白没有!!!!
----------------------------
我说的只允许一个用户登陆是什么意思呢,就是说一个客户端登陆了一个网站,他有一个合法的sessionid,但是他机器上有木马,把他的客户端的最新生成的id给偷走了,他要去登陆但这时候网站有一个用户才能登录的限制,这样一来他就算有了合法的id也登不上去,等着那个客户端离开的时候合法的session。aband了 也就是说偷走的session也没有用了!
----------------------------
其实你没有必要弄得这么明白,只要你知道他的工作原理就ok,而且你说的fidder的测试我不知道是什么,不过你测试的方法一定是有问题的,你那么相信fidder吗?我只相信自己写的测试程序,给你一个提示吧用js来测试客户端的cookies,修行在你自己了,用js!!!
-----------------------------
生成新的sessionid的话,服务器新生成了新的,随之你客户端也生成新的aspsessionid与之对应就像一把锁有两个钥匙,一把在服务器端,一把在客户端,要验证的时候把两把钥匙对一起,一样就ok不一样就end。就算你新生成了新的session也是需要往客户端写入新的aspsessionid,进行比对,所以新不新没有意义的,这就是session的工作机制,如果禁用了cookies不让往客户端写东西的话,session也就失效了,这就是为什么客户端必须要允许cookies写入session才能生效的原因。因为客户端不让写入的话,服务器端的钥匙将没有比对的对象,不知道我说明白没有!!!!
----------------------------
我说的只允许一个用户登陆是什么意思呢,就是说一个客户端登陆了一个网站,他有一个合法的sessionid,但是他机器上有木马,把他的客户端的最新生成的id给偷走了,他要去登陆但这时候网站有一个用户才能登录的限制,这样一来他就算有了合法的id也登不上去,等着那个客户端离开的时候合法的session。aband了 也就是说偷走的session也没有用了!
----------------------------
其实你没有必要弄得这么明白,只要你知道他的工作原理就ok,而且你说的fidder的测试我不知道是什么,不过你测试的方法一定是有问题的,你那么相信fidder吗?我只相信自己写的测试程序,给你一个提示吧用js来测试客户端的cookies,修行在你自己了,用js!!!
展开全部
客户端COOKIE里的ASPSESSIONID是不会因为服务端SESSIONID改变而改变的, 如果你看过很多资料的话应该也知道.
如果你要防止别人偷盗COOKIE来登录的话, 那就用多一个COOKIE去判断吧, 不要只认一个SESSION
偶的解决方法是把客户端的IP,浏览器代理还有登录的用户名串起来加密保存到COOKIE里, 然后在需要时重新抓出客户端IP跟浏览器代理来判断连接是否正常, 只要对方的其中一项改变了那么登录就无效
希望能给你带来一点参考, 偶也正好在找有关SESSIONID的东西, 这里有编文章希望对你有帮助
如果你要防止别人偷盗COOKIE来登录的话, 那就用多一个COOKIE去判断吧, 不要只认一个SESSION
偶的解决方法是把客户端的IP,浏览器代理还有登录的用户名串起来加密保存到COOKIE里, 然后在需要时重新抓出客户端IP跟浏览器代理来判断连接是否正常, 只要对方的其中一项改变了那么登录就无效
希望能给你带来一点参考, 偶也正好在找有关SESSIONID的东西, 这里有编文章希望对你有帮助
参考资料: http://blog.csdn.net/misterliwei/archive/2006/11/09/1375124.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题1:关于网站安全的问题与session没有太大的关系,关键还是程序设计的问题。介于你的情况可以参照动网论坛的管理登陆方法:登陆管理时验证用户是否符合管理权限。
问题2:当用于浏览站点时所产生sessionid不会出现变化,但是内容是根据站点程序而不同的。
问题2我回答的不一定正确,主要是因为操作层面上所需的内容已经基本解决大多数的问题,因此关于原理了解的不是很深入。
问题2:当用于浏览站点时所产生sessionid不会出现变化,但是内容是根据站点程序而不同的。
问题2我回答的不一定正确,主要是因为操作层面上所需的内容已经基本解决大多数的问题,因此关于原理了解的不是很深入。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询