【发布时间】:2019-09-08 13:31:00
【问题描述】:
我正在我的 Web 应用程序中实施 CSRF 保护。
我使用org.springframework.security.web.csrf.CookieCsrfTokenRepository 类来生成 X-XSRF 令牌。此令牌在每个请求的响应中作为 cookie 发送。
UI 组件是部署在不同服务器上的单页应用程序,它会读取此 cookie 并从 cookie 中读取 X-XSRF 令牌并将其设置为所有后续请求中的标头。
Spring 验证收到的 X-XSRF 令牌并允许/拒绝请求。这工作正常。
但是它们是一个约束,这个 X-XSRF cookie 必须是 httpOnly 是 false 以便客户端 JavaScript 可以读取它。
我们无法读取httpOnly 为true 的cookie。
在 X-XSRF 令牌 cookie httpOnly 是 true 的 Web 应用程序中,是否有任何其他替代方法可以保护 Web 应用程序 CSRF。
使用 JavaScript 方法 (document.cookie) 我无法读取 httpOnly 属性设置为 true 的 cookie,请参阅:
- How to read a secure cookie using JavaScript
- Secure and HttpOnly cookies
- Cross-Site Request Forgery Prevention Cheat Sheet
我无法更改所有 cookie,因为 httpOnly 在 Websphere 中是 false。
或者我是否遗漏了一些东西,客户端 JavaScript 可以读取 httpOnly 的 cookie 是 true。
【问题讨论】:
标签: javascript java spring spring-security csrf