Spring security中每个请求的不同csrf令牌

Posted

技术标签:

【中文标题】Spring security中每个请求的不同csrf令牌【英文标题】:Different csrf token per request in Spring security 【发布时间】: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。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

在我的应用程序中登陆网络应用程序后,我有两个选项卡,默认情况下将显示第一个选项卡数据。由于我使用的是
我可以在此页面上看到 csrf 令牌。如果我去 tab2 这是一个 GET 调用来获取数据并返回 tab1 这又是 GET 调用。如果单击对后端进行 post 调用的任何按钮,则在第一个选项卡上。这里 post call 失败并收到 403 禁止错误消息 "Expected CSRF token not found. Has your session expired" 。这里有任何帮助
@Kiran,您可能需要创建一个新问题而不是评论。您可能应该包含一些工作代码作为示例,以便人们可以帮助您调试问题。

以上是关于Spring security中每个请求的不同csrf令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中编写自定义过滤器?

Spring Security 推荐的设计以请求用户登录到具有不同角色的不同用户

Spring Security CSRF 令牌存储库 Cookie 是不是会自动适用于所有 Ajax 请求?

Spring实战----Security4.1.3实现根据请求跳转不同登录页以及登录后根据权限跳转到不同页配置

带有 Spring Security CSRF 令牌的 jQuery 文件下载插件问题

Spring Security - OAuth2 和 CustomAuthenticationProvider。如何为每个配置不同的 URL 模式?