【问题标题】:Different csrf token per request in Spring securitySpring security中每个请求的不同csrf令牌
【发布时间】:2016-06-21 01:12:11
【问题描述】:

我在我的 Spring Security xml 文件中使用<csrf/> 标记用于 Web 项目。并以一种形式发送 csrf 令牌:

<form action="" method="post">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>

但是在通过 BurpSuite 拦截请求时,我在每个请求上都获得相同的 csrf 令牌,直到会话持续存在。

有什么方法可以让每个请求发送不同的 csrf 令牌而不是 spring 安全中的每个会话。

我正在使用 3.2.4 spring security jars。

【问题讨论】:

    标签: java spring spring-security csrf csrf-protection


    【解决方案1】:

    CSRF 令牌的默认持续时间是会话持续时间。 CSRF 令牌存储在 HTTP 会话中,因此是基于每个会话生成的。更多详情请查看Spring Security documentation on CSRF

    Spring Security 可以扩展以满足个人需求,因此可以根据您的目的进行扩展。

    但是,这个扩展会影响可用性:

    1. 在第二个选项卡中打开 Web 应用程序将导致会话在一个或两个选项卡中中断。
    2. 提交表单上的“返回”按钮可能会导致一些奇怪的错误。

    【讨论】:

    • 在我的应用程序中登陆网络应用程序后,我有两个选项卡,默认情况下将显示第一个选项卡数据。由于我使用的是
      我可以在此页面上看到 csrf 令牌。如果我去 tab2 这是一个 GET 调用来获取数据并返回 tab1 这又是 GET 调用。如果单击对后端进行 post 调用的任何按钮,则在第一个选项卡上。这里 post call 失败并收到 403 禁止错误消息 "Expected CSRF token not found. Has your session expired" 。这里有任何帮助
    • @Kiran,您可能需要创建一个新问题而不是评论。您可能应该包含一些工作代码作为示例,以便人们可以帮助您调试问题。
    猜你喜欢
    • 2019-12-06
    • 2018-11-22
    • 1970-01-01
    • 2014-01-06
    • 2016-05-02
    • 2013-04-25
    • 2017-09-07
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多