0
我们在将会话移至Redis时开始的CSRF令牌存在问题。问题在于用户注销并长时间离开登录屏幕,例如,过夜。然后,在早上,由于redis会话已从服务器(TTL)中删除,因此表单CSRF令牌无效,第一次登录尝试总是失败。在会话过期后无法验证CSRF令牌的真实性 - Rails + devise + redis
我在网上搜索了几个小时,但不知道什么是正确的路要走。添加此文件解决问题:
class SessionsController < Devise::SessionsController
skip_before_filter :require_no_authentication, only: [:new]
end
但从我read online,这是一个安全隐患。我一直在寻找,看见几个选择:
- 上失败的尝试,提交表单之前从服务器返回一个新的令牌,并重新提交表单
- ,进行AJAX GET调用来检索新的令牌
- 令牌添加到请求标头中的登录控制器
。如果我理解正确的安全风险,我看不出任何的解决方案解决了安全问题。我的意思是,从我读到的无保护登录API的风险来看,攻击者可以欺骗其他人登录到攻击者配置文件并输入私有数据,然后攻击者可以使用这些数据。所以,有了这些解决方案,攻击者就可以模仿相同的行为并自行入侵,对吧?
解决此问题最安全的方法是什么?