安全实现“记住我”的方法
来源:互联网 发布:js获取用户访问地区 编辑:程序博客网 时间:2024/05/29 14:30
1、寻找身份验证Cookie的时限部分
“记住我”功能可以简单地归结为,它控制了cookie的时限并且决定某个人能够持续登录多久。
ASP.NET默认使用一个会话cookie,或者换句话说,一个cookie,而且没有一个明确的截止日期,因此将在浏览器关闭时强行过期。这是一种方法,另一种是直接置入短保质期,即使浏览器继续使用该cookie,用户也将被自动注销。当然,你也可以在服务器上控制这种行为,你也可以让身份验证cookie的时限不断延长,如果系统正在积极使用由服务器响应增加的时限。
只要保持这个验证cookie有效,特定的人就会被记住。那多久的时效才合适呢?上面的例子中默认为2天,但这对于合法的使用者显然有些过短。持续时间较短,意味着更少的风险,但更多的不便,持续时间较长,使得它更容易为用户增加潜在的风险。让我们更进一步的看看这个风险。
2、长期认证状态的利用
当在被认证之前,你的会话无法被劫持。例如有的网站的cookie将在6个月后到期,与此同时它没有HTTP only的标记,这样一来他们网站的XSS漏洞可以为攻击者提供半年的时间去获取并使用用户的凭证。同样的情况,如果时限为1个月,他们仍会有一些严重的漏洞,但上述攻击的机会实实在在地得到了削减。
另一方面,在他们暴露着ELMAH日志的情况下,依然有一系列的重大疏漏,但除非有人在一周前已经用“记住我”登录了网站,并且触发了那个默认配置的漏洞,否则凭据不会被泄露。如果你想找个网站自己试试看的话,就算是一个你已经登录过的网站,也可以看到存在时限风险的cookie。
所以说一切有关身份验证的cookie如果想要保护好用户凭据的话,HttpOnly的安全属性是和严谨的安全态度必须的。虽然所有经典的劫持威胁仍然存在,不过,解决这些cookie上的问题也是绝不容忽视的。
归根结底,这是一个权衡,需要考虑的因素如攻击者要取得的数据的价值,在加强验证安全性时对于用户使用的便捷性和网站安全配置所造成的负面影响。例如,Facebook中存在着一些非常有用的社会性的用户数据,而用户又非常希望无延时般的响应速度,在此之上他们还对自己的账户安全上进行了大笔的投资。而对于AFD网,在持有用户个人身份数据以及财务信息的同时,提供了用户所要求的安全验证服务,能看出用户本身也是有相关安全意识的。他们有着迥然不同的风险,这两个网站对于身份验证cookie的时限策略应该是完全不同的。
3、强化
或许会觉得AUTH cookie很无解,有关安全性的东西总会有一种更好的解决方案,但这是有代价的,安全性取决于你愿意付出的的时间、金钱、便利性,而且也总会有人告诉你,你做错了!让我们来看看关于使用AUTH cookie时限的一些可能的加强方法。
对于一个长期有效的AUTH cookie,问题在于他们需要有效地保持用户身份的验证和面对如CSRF或clickjacking等攻击风险。当然,还有很多需要利用长期cookie的风险并没有列出,但这并不影响围绕防范方法的讨论。还有一点就是当一个专用cookie为用户在服务器上提供过有效认证之后,在返回时它还可以重新开启另一个认证会话。虽然最初的会话会迅速到期,但关键是重启的新会话,它会因为用户勾选了“记住我”并再次登录而进行另外的验证。
一种验证方式包括利用用户的IP地址/用户代理/其他显著特点来限制“记住我”的cookie。这能提供一些对cookie劫持的防御。当然,要在合法使用的情况下进行这些变更。特别是在移动网络中这类的情况并不少见——用不同的IP回访一个网站。你的ISP不一定总会提供静态的IP地址。至于用户代理,还有浏览器差异,如Chrome和Firefox的更新简直恍如隔日。然而除非你刻意去挑选某些优质的代理,否则使用代理将是一个危险的做法。
文章转载自: 如何安全实现“记住我”的功能 http://www.studyofnet.com/news/491.html
- 安全实现“记住我”的方法
- 记住我功能的实现
- shiro 记住我 的实现
- 实现记住我的帐号的功能
- 登录页面“记住我”的功能实现
- 如何做一个安全的“记住我”功能
- 记住密码的安全
- 记住我 功能实现
- 记住我 功能实现
- 通过cookie记住账号的实现方法
- 我要记住的
- 登录记住我功能实现
- 记住我remember-me功能的几种实现方式
- 实现登录界面的“记住我”功能 JAVA
- iOS 线程安全 记住这些方法
- 记住密码的实现
- 记住密码的实现
- 登录时记住用户名和密码的Cookie实现方法
- PHP中break及continue两个流程控制指令区别分析
- Linux下SQLPLUS替代工具rlwrap安装使用
- ROS中QThread的使用(同时进行topic的订阅)
- 最少硬币找零问题-动态规划
- Android实现应用下载并自动安装apk包
- 安全实现“记住我”的方法
- Cannot nest 'webapp001/src/main/java/web' inside 'webapp001/src/main/java'
- STL算法学习2
- OCP 1Z0 053 28
- 欧拉回路
- 网易centos的yum源添加
- 关于字符编码
- 邂逅java——print() ,println()
- 跨平台OR 跨语言