如何在struts2中的有效会话期间拥有持久令牌值(或Form Key)? 当表格中有<s:token/>
时,提交表单后,令牌的值发生变化。它会导致用户无法打开2个浏览器选项卡并使用它们的问题(由于每个表单的令牌唯一值,只有一个选项卡处于活动状态)。 如何用struts2解决这个问题,并且每个会话的持久令牌值为(不是每个表格)?如何在struts2中获得每会话令牌值
我想重写拦截器就可以解决问题,但我想 考虑其他的选择
如何在struts2中的有效会话期间拥有持久令牌值(或Form Key)? 当表格中有<s:token/>
时,提交表单后,令牌的值发生变化。它会导致用户无法打开2个浏览器选项卡并使用它们的问题(由于每个表单的令牌唯一值,只有一个选项卡处于活动状态)。 如何用struts2解决这个问题,并且每个会话的持久令牌值为(不是每个表格)?如何在struts2中获得每会话令牌值
我想重写拦截器就可以解决问题,但我想 考虑其他的选择
Don't use token at all
如果您需要为每个会话的东西,使用会话本身。令牌旨在防止请求重放攻击。所以每个会话只有一个没有意义。
请看这个链接: http://stackoverflow.com/questions/10466241/new-csrf-token-per-request-or-not 和这个聊天: http://chat.stackoverflow.com/rooms/10926/laurencei-and-zerkms讨论 ---- 结论:每会话令牌,防止CSRF攻击。不是吗? –
@AminSh这个答案没有意义,可能它有一种幽默感,但没有更多。 OWASP对每个会话标记没有任何反应,但是此标记不能用于防止双重提交。 –
每个会话的令牌可以是一个防止CSRF,它必须是会话ID以外的东西http://security.stackexchange.com/questions/22903/why-refresh-csrf-token-per-form-request,尽管struts令牌似乎是最好的双重提交它也可以用作CSRF预防。 –
我也有同样的问题,在我的功能有预览,在新标签打开。用户可以预览多次,所以它会抛出一个令牌异常。我有一个代码,在功能开始我写道:
String downloadTokenName = TokenHelper.getTokenName();
String downloadToken = TokenHelper.getToken(downloadTokenName);
在函数结束在最后我重新分配令牌值:
TokenHelper.setSessionToken(downloadTokenName, downloadToken);
它解决了我的问题。
这样做的目的是什么? –
@RomanC:这会导致用户无法打开2个浏览器选项卡并使用它们的问题(由于每个表单中令牌的唯一值,只有一个选项卡处于活动状态) –
这不正确,该令牌是根据请求生成的。 –