默认情况下,Rails中的表单后期CSRF保护会为用户创建一个仅在用户会话更改时更改的真实性令牌.我们的一位客户对我们的网站进行了安全审核,并将其标记为问题.
审计员的声明是,如果我们还有一个XSS漏洞,攻击者可以抓取另一个用户的真实性令牌,并利用它进行CSRF攻击,直到用户会话到期为止.
但在我看来,如果我们有一个类似的XSS漏洞,攻击者可以轻松地抓取另一个用户的会话cookie并直接登录该用户.或者甚至只是在用户受到攻击时从脚本调用我们的REST Api.在这种情况下,能够发起CSRF攻击似乎并不会更糟......问题在于XSS漏洞.
我错过了什么吗?Rails中的默认CSRF保护是否存在实际问题?
你是完全正确的.基于令牌的CSRF保护是最常见的,只要您测试XSS的应用程序就应该没问题.
有些情况下,无论XSS如何,CSRF仍然可以停止.例如,对于您的密码更改论坛,要求他们知道当前的密码.黑客将无法伪造此请求,除非他知道当前的密码,这是一个有争议的问题.
另一种方法是要求Captcha为该请求求解.我建议使用reCapthca.