如何在struts2中具有每会话令牌值

如何在struts2中具有每会话令牌值,struts2,csrf,interceptor,Struts2,Csrf,Interceptor,在struts2中的有效会话期间,我们如何拥有持久令牌值(或表单密钥)? 当在表单中时,在提交表单后,令牌的值将发生更改。导致此问题的原因是用户无法打开2个浏览器选项卡并使用它们(由于每个表单的令牌的唯一值,只有一个选项卡处于活动状态)。 如何使用struts2解决此问题,并使每个会话(而不是每个表单)具有持久令牌值 我认为覆盖拦截器可以解决问题,但我想 考虑其他选项< /P> 完全不要使用令牌 如果每个会话都需要某些内容,请使用会话本身。令牌用于防止请求重播攻击。因此,每次会话只使用一个是没有

在struts2中的有效会话期间,我们如何拥有持久令牌值(或表单密钥)? 当
在表单中时,在提交表单后,令牌的值将发生更改。导致此问题的原因是用户无法打开2个浏览器选项卡并使用它们(由于每个表单的令牌的唯一值,只有一个选项卡处于活动状态)。 如何使用struts2解决此问题,并使每个会话(而不是每个表单)具有持久令牌值

我认为覆盖拦截器可以解决问题,但我想 考虑其他选项< /P>
完全不要使用令牌


如果每个会话都需要某些内容,请使用会话本身。令牌用于防止请求重播攻击。因此,每次会话只使用一个是没有意义的。

我也有同样的问题,在我的功能中有一个预览,它会在“新建”选项卡中打开。用户可以多次预览,因此引发了令牌异常。在我编写的函数开始时,我得到了一个代码:

String downloadTokenName = TokenHelper.getTokenName();
String downloadToken = TokenHelper.getToken(downloadTokenName);
在finally中的函数末尾,我将令牌值重新分配为:

TokenHelper.setSessionToken(downloadTokenName, downloadToken);

它解决了我的问题。

拥有这样一个令牌的目的是什么?@RomanC:这导致了这个问题,用户无法打开两个浏览器选项卡并使用它们(由于令牌在每个表单上的唯一值,只有一个选项卡处于活动状态)。这不是真的,令牌是根据请求生成的。@RomanC:没错!所以我不想要这个机制!我希望每个会话(而不是每个请求)只生成一次令牌,但在这种情况下不能使用
s:token
标记。请查看以下链接:和此聊天:-结论:每个会话令牌,防止CSRF攻击。是吗?@Amish这个答案没有意义,也许它有幽默感,但没有更多。OWASP不反对每会话令牌,但此令牌不能用于防止双重提交。每会话令牌可以是一个阻止CSRF,并且必须是会话id以外的内容,尽管struts令牌似乎最适合双重提交,但它也可以用作CSRF阻止器。