我一直在研究 OWASP 建议以防止 CSRF 攻击(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)。
现在,我不明白这将如何防止结合 XSS 和 CSRF 攻击的攻击。假设我们有以下攻击场景:
攻击者能够执行存储型 XSS 攻击,因此攻击者在网站上插入的脚本在用户每次访问该页面时都会执行。
该脚本将完全重新设计 DOM,例如,攻击者的脚本将重新设计它,而不是用户需要提供一些不相关信息的原始表单,以便将该表单重新设计为添加具有管理员权限的用户的表单。请注意,用户不会看到这一点,因为字段的标签将保持不变。只有 POST 会有所不同。
攻击者知道该网站使用了反 CSRF 令牌。查看 OWASP 的建议:'(..)application 应该包含一个隐藏的输入参数,该参数具有通用名称,例如“CSRFToken”',攻击者知道大多数网站在页面的某处都会有一个带有此 id 的隐藏字段。
攻击者确保该字段的值也在虚假 POST 中提交。即使攻击者不知道这个隐藏字段的值,它也可以在 POST 中指定这个值应该与请求一起发送。这是可能的,因为用户的 DOM 已经被修改,请求将来自用户的浏览器,用户的 cookie 也会随请求一起发送。
用户提交表单,假用户被创建。
在我看来,仅使用 CSRF 令牌无法避免这种情况。或者是 XSS 攻击已被中和的同步器模式的隐含假设?