如何在 API-Centric Web 应用程序中防止 CSRF

How to prevent CSRF in API-Centric Web Application

我希望使用 API-Centric 架构构建 Web 应用程序。

应用程序的前端将使用 AJAX 向 REST API 发出请求。

API 也被其他客户端用于各种目的。我认为 CSRF 令牌的使用可能不适用于它们的实现。

其他方法包括验证 headers 中的来源,当然,headers 很容易被欺骗。

我如何为这个应用程序实施强大的 CSRF 预防策略?

一些提议:首先你可以使用 api-url like GET api/gime-csrf which return CSRF token 作为响应,并将其设置在 http-only cookie 中(因此 JS 无法访问到它 - 但请记住在服务器中阻止 TRACE 请求以防止 XST 攻击)。然后,当您发出一些 "save state" 请求时,例如 POST/PUT/PATCH - 您只需将 CSRF 放入某些请求 header - 然后在服务器中将 header 令牌值与 cookie 令牌值进行比较。