我可以通过将其与会话ID相关联来使我的ASP.NET FormsAuthentication cookie更安全吗?

Tom*_*son 6 asp.net security cookies forms-authentication

我们注意到可以在另一台机器上重新创建ASP.NET FormsAuthentication cookie的副本,允许第二台机器进行身份验证而无需登录.

一个建议的解决方案是将会话ID存储在内部FormsAuthenticationTicket.UserData并检查两个值是否在内部匹配Application_AuthenticateRequest().

我们正在使用:

FormsAuthenticationTicket.IsPersistent = false;
Run Code Online (Sandbox Code Playgroud)

这种将FormsAuthentication cookie与会话ID相关联的方法是一个好主意吗?

wom*_*omp 19

我认为你是在思考这个问题.复制cookie的能力只是cookie的固有问题 - 任何人都可以拦截任何cookie并通过在另一台机器上设置来模拟其中的任何数据.

身份验证cookie的"安全性"来自这样一个事实:没有人可以(假设)手工制作cookie以伪造经过身份验证的用户.但是,一旦创建了cookie,它当然可以用于身份验证.这意味着为了解决您的"问题",您仍然需要先拥有有效的用户登录.如果该用户通过将他的cookie复制到其他机器来滥用系统以给予每个人访问权限,则与用户只是告诉每个人她的用户名和密码完全相同,除非更加迟钝.因此,问题不在于复制cookie - 而是用户自己.

另一个攻击媒介是网络被泄露,有人可以拦截流量,通过嗅探器或其他任何东西将cookie拼凑在一起 - 但同样,这也是cookie本身所固有的.这称为会话劫持,防止这种情况的唯一方法是为您的站点使用SSL.

如果你真的很担心它,我只是将你的身份验证和会话超时设置为相同,然后在你的global.asax文件中,只要用户的会话到期就调用FormsAuthentication.Signout().这会在用户完成会话时使身份验证无效,从而强制他们稍后再次登录.当然,这可能会给您的用户带来极大的烦恼......

我也强烈推荐这篇MSDN文章.它可能比我能更好地回答你的问题.