我最近升级到 Rails 4,并改用加密 cookie 作为会话存储。不幸的是,这似乎意味着重放攻击是可能的,即如果用户注销,任何 cookie 都不会失效,并且可以用于在没有用户/密码的情况下进行身份验证。据我所知,这是加密 cookie 工作方式的一个缺陷(如果我错了,请启发我!),所以我的问题是:是否有一个公认的解决方案来防止使用加密 cookie 进行重放攻击?
经过一些研究和修改,我提出了以下解决方案。
- 当用户登录时,创建一个随机秘密(随机是指后续秘密应该具有较低的匹配概率)
- 将该秘密存储在会话中,即在 cookie 中,以及服务器端,我使用 Dalli gem 来提供 memcached 功能
- 在请求需要身份验证的页面时,从 cookie 中读取密钥,并确保它存在于服务器端
- 注销时,从缓存中删除机密,因此使用相同 cookie 的任何后续请求都将失效
只要 cookie 不能被篡改,那么这应该是安全的。欢迎任何想法/评论
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)