Cookie应始终为过期的随机值。在某些情况下,您可以将状态存储为Cookie值,并且不会造成安全隐患,例如用户首选的语言,但应尽可能避免这种情况。打开HttpOnlyCookies,是一个好主意。
阅读A3:OWASP top 10 for 2010中的“破坏的身份验证和会话管理”。本节中的一个重点是https 必须用于整个会话。如果会议持续很长时间,那么这更重要。
另外请记住,“记住我”创建了一个大型窗口,攻击者可以在该窗口上“骑”会话。这给了攻击者很长的时间(几个月?),他可以提供CSRF攻击。即使你拥有CSRF保护,攻击者仍然可以使用XSS和XmlHttpRequest进行会话(HttpOnlyCookies将防止完全劫持)。 “记住我”让其他威胁如xss,csrf,嗅探更严重。只要这些漏洞得到解决,那么你就不应该对真实世界的黑客有问题。
最简单的(安全)的方法来实现一个“记住我”功能,将修改会话超时你的web.config文件:
<configuration>
<system.web>
<sessionState timeout="60"/>
</sessionState>
</system.web>
</configuration>
硒超时的东西高,也许一个月所以。如果未选中“记住我”复选框,则存储更正常超时的会话变量(如24小时)。在每个请求的头文件中检查此会话变量。如果复选框被选中,然后正常行为,并让asp.net照顾它。
如果会话没有过期,那么暴力就会容易得多。这些值很大,但允许黑客花费数年时间来猜测会话ID是一个漏洞。
很好的答案。我唯一要添加的是采取预防措施来防止XSS和CSRF。如果你有长时间的会话,这两个问题就变得很重要。 – 2010-04-07 22:17:23
@Srim我完全同意你的看法。 (1) – rook 2010-04-07 22:28:31