3

我最近升级到 Rails 4 并切换到加密 cookie 作为会话存储。不幸的是,这似乎意味着重放攻击是可能的,即如果用户注销,任何 cookie 都不会失效,并且可以用于在没有用户/密码的情况下进行身份验证。据我所知,这是加密 cookie 工作方式的一个缺陷(如果我错了,请赐教!),所以我的问题是:是否有一种可接受的解决方案来防止使用加密 cookie 进行重放攻击?

4

1 回答 1

0

经过一些研究和一些修补,我想出了以下解决方案。

  • 当用户登录时,创建一个随机秘密(随机的意思是随后的秘密应该具有较低的匹配概率)
  • 将该秘密存储在会话中,即 cookie 以及服务器端,我使用 Dalli gem 来提供 memcached 功能
  • 在请求需要身份验证的页面时,从 cookie 中读取秘密,并确保它存在于服务器端
  • 注销时,从缓存中删除秘密,因此任何使用相同 cookie 的后续请求都将失效

只要 cookie 不能被篡改,那么这应该是安全的。欢迎任何想法/评论

于 2013-08-27T08:28:50.607 回答