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

前端之家收集整理的这篇文章主要介绍了ASP.NET MVC 4和会话安全漏洞前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
而不是使用ASP.NET MVC用户的系统,我只是使用session,如下所示: @H_301_2@当他登录(用户名密码)时,我从数据库获取相应的用户并设置:

Session["UserId"] = fetchedUser.UserId;
@H_301_2@然后,我总是检查他是否登录

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

@H_301_2@我的问题是:

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

解决方法

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

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

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

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

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

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

@H_301_2@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.

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

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

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