ASP.NET MVC 4和会话安全漏洞

前端之家收集整理的这篇文章主要介绍了ASP.NET MVC 4和会话安全漏洞前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
而不是使用ASP.NET MVC用户的系统,我只是使用session,如下所示:

当他登录(用户名密码)时,我从数据库获取相应的用户并设置:

Session["UserId"] = fetchedUser.UserId;

然后,我总是检查他是否登录

if (Session["UserId"] != null && ...)

问题是,如果有人从登录用户复制ASP.NET_SessionId的值(例如:用户去卫生间,坐在他旁边的同事用铬检查员检查他的饼干),那么他将能够创建一个cookie在他的计算机中并充当该用户.

我的问题是:

>如果会话ID保存在cookie中,为什么会话比cookie更安全?@H_502_15@>我可以使这更安全(并继续使用会话)?@H_502_15@>内部ASP.NET用户身份验证系统如何实现?

解决方法

不使用Session作为身份验证机制的主要原因是它可能使您的应用程序容易受到 Session Fixation的影响.例如,如果用户使用HTTP协议到达您的站点并收到存储在该站点中的会话ID,则可能会出现问题. ASP.NET_SessionId cookie.用户可以稍后登录,即使您的登录页面可能在HTTPS下受到保护,会话令牌也已在HTTP下生成,这意味着它已使用明文传输.

回答你的其他观点:

Why are sessions safer than cookies if the session id is saved in a@H_502_15@ cookie?

存储在会话中的数据存储在服务器端,因此攻击者更难以篡改此数据.所有cookie存储都是此数据的标记,而不是数据本身.话虽如此,使用FormsAuthenticationProvider仍然更安全,因为这会在登录完成后创建新的身份验证令牌,而不是在会话启动时出于避免上述会话固定的原因.

Can I make this safer (and continue using session)? How does@H_502_15@ internally ASP.NET User authetication system do it?

内置提供程序已经适合用途,因此最好使用它而不是捏造另一种机制来满足您的要求.它也很容易扩展,因此您可以根据自己的需要进行自定义. ASP.NET用户身份验证创建加密票证并将其存储在cookie中,而不是存储对服务器端变量的引用:http://support.microsoft.com/kb/910443

我还会提请你注意注销机制以及如何保护它.尤其

Calling the SignOut method only removes the forms authentication cookie. The Web server does not store valid and expired authentication tickets for later comparison. This makes your site vulnerable to a replay attack if a malicIoUs user obtains a valid forms authentication cookie.

详情:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx

此外,您可能需要在ASP auth cookie上设置“secure” flag以防止它被MITM攻击者通过HTTP泄露.

猜你在找的asp.Net相关文章