API CSRF 保护

API CSRF protection

我有一个由简单 JSON API 和 React 前端组成的应用程序。身份验证是通过 cookie 处理的,前端是从我用于 API 的同一个域提供服务的。由于我不允许 CORS,想知道如果 API 仅接受具有某些自定义 header 的请求,例如如果 X-Requested-With 设置为 XMLHttpRequest?

攻击者可以在不违反 Same-Origin 政策 (SOP) 的情况下发送带有 XMLHttpRequest 的 cross-site 请求 - 这里唯一的限制是攻击者的站点将无法查看响应。 Cookie 包含在受害者浏览器发送的每个请求中,因此 API 调用仍会触发 cross-site XHR,因此此 API 仍然容易受到 CSRF 攻击。

如果您不想对安全架构进行任何更改,那么 CSRF Prevention Cheat Sheet recommends checking the Origin header。本文档描述了其他方法,例如 CSRF 令牌同步器方法,它可以用作 header 元素并被认为是更强大的防御方法。