【发布时间】:2015-06-25 17:35:17
【问题描述】:
我正在尝试制作一个在单个 HTML 页面上运行的 web 应用程序,它允许用户通过 JavaScript 和 ajax 与服务器进行交互。我想通过在每个请求中包含一个 csrf 令牌来使我的请求免受 csrf 攻击。
因为我的 webapp 只能在单个页面上运行,所以我不能在视图中使用 ${_csrf.token}(或类似的东西)语法,因为视图将是一个 json 对象。相反,我想要一个像“/security/csrf”这样的url,它返回一个与用户会话关联的令牌。 (是的,这不会完全是一项宁静的服务。)
我有什么方法可以生成一个 csrf 令牌,Spring Security 在验证登录时可以访问该令牌?另外,以这种方式使用 csrf 令牌是否存在缺陷?
【问题讨论】:
-
每个请求的令牌将终止缓存。每个会话的令牌同样安全。在您的第一个 html 响应中,将 csrf 令牌包含在元标记中,就像文档说的那样:docs.spring.io/spring-security/site/docs/current/reference/html/…
-
所以如果我每次会话只使用一个令牌,Spring 会继续在多个请求中接受相同的令牌吗? @NeilMcGuigan
-
是的,您可以跨请求(在同一个会话中)使用相同的令牌。
-
好的,谢谢!我会试试这个方法!
-
如果我想在每个新请求时更改令牌值,那么由于我不想重复令牌值,如果有人抓住我的令牌值,那么他们可以访问我的请求,所以请帮助我或建议我是正确的一种方法。
标签: java spring spring-mvc spring-security csrf