将 REST 服务的 CSRF 令牌作为 Http 响应标头包含在内是否安全?

Jen*_* S. 3 java rest csrf spring-security owasp

我有一组 REST 服务,它们使用类似于 OWASP 的同步器令牌模式 ( https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet ) 的方式受 CSRF 保护。* REST 使用 Java 和 JAX-RS 实现 * 安全性使用 Spring Security CSRF 令牌实现 * HTTP PUT、POST 和 DELETE 受到保护

在我的 Web 应用程序启动时,我在 HTML 页面中写入正确的 CSRF 令牌,然后应用程序将令牌作为“X-CSRF-HEADER”包含在每个请求的请求标头中。

我还有直接访问 URL 的客户端(例如,curl 命令行和其他)。

备用客户端需要以某种方式获取 CSRF 令牌(当然是在经过身份验证之后)。

将令牌作为 GET 请求的 HTTP 响应标头包含在内是否安全?如果是这样,那么我可以将其包含在响应标头中,并且客户端可以将其读出并将其包含在将来的请求标头中。

这样安全吗?

Rob*_*nch 5

通常认为在响应标头中包含 CSRF 令牌是安全的。正如请求正文一样,响应标头在 SSL 响应中加密,并且无法跨域访问。默认情况下,CSRF 令牌不呈现给响应的原因是为了确保我们延迟创建会话,直到有必要为止。有关详细信息,请参阅SEC-2276