表单身份验证 - Cookie重放攻击 - 保护

AJM*_*AJM 7 asp.net security

我被问及有关我的ASP.NET网站表单身份验证的cookie重放攻击.

我遵循了下面的建议,以防止任何攻击,但认为如果有人设法获取cookie(尽管只是很短的时间),该网站仍然是脆弱的.有没有办法在注销时完全销毁表单身份验证会话,这样即使有人偷了cookie,也没有机会恶意使用它

随后的建议是

我们相信,我们已经采取了所有可靠的步骤,以便在ASP.NET的范围内防止这种情况发生.请参阅下面的详细回复.

但是,我们已经实施了Microsoft建议的步骤来防范这种情况(请参阅http://support.microsoft.com/default.aspx?scid=kb;en-us;900111)

·身份验证cookie永远不会写入客户端计算机,因此很难窃取.

·应用程序可通过SSL运行,因此cookie永远不会通过非安全连接发出

·我们使用15分钟的超时强制执行绝对到期,这意味着在该时间限制之后任何问题cookie都无用

·我们使用httpOnly cookie,以便没有人可以通过编程方式拦截或更改此cookie.

因此,即使上述预防措施被打破,我们认为这种预防措施极不可能,恶意用户只需要15分钟的时间来打破预防措施并成功登录

Wik*_*hla 5

一个简单的想法是生成随机guid并将其存储在cookie的用户数据部分中.然后,当用户注销时,您从用户数据中检索guid并将其写入服务器端存储库,其中包含此"会话"已结束的注释.

然后,有一个http模块,它检查每个请求是否来自cookie的userdata部分的guid不指向已结束的会话.如果是,请终止请求,并显示已重复使用过期cookie的警告.

这需要每次请求额外查找的成本.

  • 另一个成本是这种方法不能很好地扩展,因为在一个使用频繁的Web应用程序中,您很快就会拥有一个充满GUID的巨大表.将当前会话的GUID存储在数据库的用户行中并在用户注销时将其设置为NULL不是更好吗?这样,您将拥有最多<存储的用户数> GUID. (3认同)
  • @ to0om:一个可能的解决方法是在有限的时间内存储guid,我认为你不需要无限的历史记录. (2认同)