【问题标题】:Spring CSRF HTTP 403 forbidden errorSpring CSRF HTTP 403禁止错误
【发布时间】:2018-01-14 08:45:15
【问题描述】:

我正在从 struts 迁移到 spring 迁移。由于我正在开发最新的春季版本 4.3,我们决定为我们的应用程序使用 CSRF 保护。在我们的 JSP 页面上,我们有两个选项卡都可以通过 http get 方法单击以调用 spring 控制器。每个选项卡都有多个链接和按钮。在获取调用之后,如果我在页面上执行任何操作,例如单击一个按钮,该按钮会发布对控制器的调用。我收到 403 禁止消息“未找到预期的 CSRF 令牌。您的会话是否已过期?” .

在 Firefox 开发人员工具发布调用表单数据中,我可以看到带有令牌的 _csrf 正在传递。响应标头说 x-frame-opitons: Deny。我怀疑上一个调用 HTTP GET 是在选择导致问题的选项卡时。我们是否也需要为 http GET 方法传递 csrf 令牌?有什么帮助吗?

【问题讨论】:

  • 您可能需要共享一些代码,因为您的要求不是很清楚。首先,不,您当然不需要通过 GET 请求发送 CSRF 令牌,但是当控制器处理 GET 请求时,将生成一个新的 CSRF 令牌,这是 Spring Security 期望接收的以下帖子。在 GET 之后显示的页面中,您是否仍然看到 CSRF 令牌,它是否已更新?在 GET 之前和之后,您应该会在浏览器中看到不同的 CSRF 令牌值。
  • 在 GET 调用之后我得到了相同的 csrf 令牌。实际上,我并没有编写任何新代码来读取响应。我使用的是 spring mvc
    标签或 。根据 spring 文档stackoverflow.com/questions/26866529/spring-csrf-token-life 默认 csrf 令牌生命周期是基于会话的。我会尝试在这里添加一些代码。

标签: spring spring-mvc spring-security csrf


【解决方案1】:

正如我所说,我正在处理迁移项目,对于每次调用现有代码,他们都会在一种实用程序方法中清理会话属性。尽管由于实用程序方法中的会话清理,我在每个请求中发送令牌,但我的令牌正在与空值进行比较。因此它抛出错误“未找到预期的 CSRF 令牌。您的会话是否已过期”。

现在已经解决了。谢谢。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2020-01-17
    • 2018-01-07
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多