CSRF-Prevention 对于 XHR-Requests

CSRF-Prevention for XHR-Requests

我刚刚了解了 CSRF-prevention 的详细信息。在我们的应用程序中,所有 "writing" 请求都是使用 XHR 完成的。整个页面实际上没有提交一个表单,一切都是通过 XHR 完成的。

对于这种情况,维基百科建议 Cookie-to-Header Token。在那里,一些随机值在登录期间(或在其他某个时间点)存储在 cookie 中。当制作 XHR-request 时,此值将被复制到自定义 http-header(例如 "X-csrf-token="),然后由服务器检查。

现在我想知道,在这种情况下是否真的需要随机值。我认为设置一个自定义 header 就像 "X-anti-csrf=true" 应该就足够了。似乎比拖动随机值稳定得多。但这会带来任何安全问题吗?

这取决于您想做出多少冒险假设。

  1. 您已正确配置您的 CORS headers,
  2. 并且用户的浏览器尊重他们,
  3. 所以恶意站点无法将 XHR 发送到您的域,
  4. 这是发送带有请求的自定义 header 的唯一方法

如果您相信这一切,当然,固定的习惯 header 会奏效。 如果您删除任何假设,那么您的方法将失败。

如果你让 header 无法猜测,那么你就不需要做出那些假设。您仍然依赖这样的假设,即 header 的值不能被第三方拦截和复制(为此有 TLS)。