加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 22:35:22 所属栏目:asp.Net 来源:网络整理
导读:而不是使用ASP.NET MVC用户的系统,我只是使用session,如下所示: 当他登录(用户名密码)时,我从数据库中获取相应的用户并设置: Session["UserId"] = fetchedUser.UserId; 然后,我总是检查他是否登录: if (Session["UserId"] != null ...) 问题是,如果有人从
而不是使用ASP.NET MVC用户的系统,我只是使用session,如下所示:

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

Session["UserId"] = fetchedUser.UserId;

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

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

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

我的问题是:

>如果会话ID保存在cookie中,为什么会话比cookie更安全?
>我可以使这更安全(并继续使用会话)?
>内部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
cookie?

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

Can I make this safer (and continue using session)? How does
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泄露.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读