而不是使用ASP.NET MVC用户的系统,我只是使用session,如下所示:
@H_301_2@当他登录(用户名密码)时,我从数据库中获取相应的用户并设置:
>我可以使这更安全(并继续使用会话)?
>内部ASP.NET用户身份验证系统如何实现?
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@H_301_2@存储在会话中的数据存储在服务器端,因此攻击者更难以篡改此数据.所有cookie存储都是此数据的标记,而不是数据本身.话虽如此,使用FormsAuthenticationProvider仍然更安全,因为这会在登录完成后创建新的身份验证令牌,而不是在会话启动时出于避免上述会话固定的原因.
cookie?
@H_301_2@Can I make this safer (and continue using session)? How does@H_301_2@内置提供程序已经适合用途,因此最好使用它而不是捏造另一种机制来满足您的要求.它也很容易扩展,因此您可以根据自己的需要进行自定义. ASP.NET用户身份验证创建加密票证并将其存储在cookie中,而不是存储对服务器端变量的引用:http://support.microsoft.com/kb/910443 @H_301_2@我还会提请你注意注销机制以及如何保护它.尤其
internally ASP.NET User authetication system do it?
@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泄露.