【问题标题】:Spring: Generate new csrf token programmaticallySpring:以编程方式生成新的 csrf 令牌
【发布时间】: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


【解决方案1】:

每个请求的令牌将终止缓存。每个会话的令牌同样安全。

在您的第一个 html 响应中,将 csrf 标记包含在元标记中,就像文档说的那样:http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html#csrf-include-csrf-token-ajax

您可以跨请求(在同一个会话中)使用相同的令牌

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 2018-09-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多