当前位置:  开发笔记 > 后端 > 正文

实施安全"记住我"的最佳实践

如何解决《实施安全"记住我"的最佳实践》经验,为你挑选了1个好方法。

有时,我遇到某些Web开发框架,这些框架不提供身份验证功能,例如在Authentication ASP.NET中.

我想知道在通过手工编码实现"记住我"登录功能时需要考虑哪些安全措施?

以下是我通常做的事情:

    将用户名存储在cookie中.用户名未加密.

    将密钥存储在cookie中.使用基于用户名的单向函数生成秘密密钥.服务器将根据用户名验证密钥,以确保不更改此用户名.

    在cookie中使用HttpOnly.http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

还有我错过的其他东西,可能导致安全漏洞?



1> rook..:

cookie应该始终是一个到期的随机值.在某些情况下,您可以将状态存储为cookie值,而不是一个安全的危险,例如用户的首选语言,但应尽可能避免这种情况.转动HttpOnlyCookies是一个好主意.

阅读A3:2010年OWASP前10名中的"破解身份验证和会话管理" .本节中的一个重点是https 必须用于整个会话.如果会话持续很长时间,那么这一点就更为重要.

还要记住,"记住我"会创建一个大窗口,攻击者可以在该窗口中"骑行".这给攻击者一个很长的时间(几个月?),他可以在其中进行CSRF攻击.即使您拥有CSRF保护,攻击者仍可以使用XSS和XmlHttpRequest进行会话(HttpOnlyCookies将阻止完全劫持)."记住我"使其他威胁如xss,csrf,嗅探更严重.只要这些漏洞得到解决,那么你就不应该对现实世界的黑客有任何问题.

实现"记住我"功能的最简单(和安全)方法是修改web.config文件的会话超时:

   
        
            
            
        
   

将超时设置为高,可能是一个月左右.如果未选中"记住我"复选框,则存储更正常超时的会话变量(如24小时).检查每个请求的头文件中的此会话变量.如果选中该复选框,则正常操作并让asp.net处理它.

如果会话没有到期,那么暴力会更容易.这些值很大,但允许黑客花费数年时间尝试猜测会话ID是一个漏洞.


很好的答案.我要补充的唯一事情是采取预防措施来防止XSS和CSRF.如果你有长期的会议,这两个问题都变得很重要.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有