Jakarta ee CSRFGuard-请求令牌与页面令牌不匹配&如何为每个会话生成令牌

Jakarta ee CSRFGuard-请求令牌与页面令牌不匹配&如何为每个会话生成令牌,jakarta-ee,tomcat7,csrf,csrf-protection,owasp,Jakarta Ee,Tomcat7,Csrf,Csrf Protection,Owasp,我正在尝试合并CSRFGuard库,以纠正应用程序中的一些CSRF漏洞。但是,按照规定进行配置后,我现在收到以下消息: 在这里,我想解释一下当我收到这个消息时的场景——假设我的应用程序登录页是这样的 这个页面HelloWorld.jsp的代码片段是 在此处插入标题 函数getParameterByNamename,url{ 如果!url{ url=window.location.href; } name=name.replace/[\[\]]/g,\\$&; var regex=new Reg

我正在尝试合并CSRFGuard库,以纠正应用程序中的一些CSRF漏洞。但是,按照规定进行配置后,我现在收到以下消息:

在这里,我想解释一下当我收到这个消息时的场景——假设我的应用程序登录页是这样的

这个页面HelloWorld.jsp的代码片段是

在此处插入标题 函数getParameterByNamename,url{ 如果!url{ url=window.location.href; } name=name.replace/[\[\]]/g,\\$&; var regex=new RegExp[?&]+name+=[^&]*|和| |$, 结果=regex.execurl; 如果!结果返回空值; if!结果[2]返回; 返回decodeURIComponentresults[2]。替换/\+/g; } 函数更改页面格式{ var selectedIndex=form.selectedPage.selectedIndex; var selectedValue=form.selectedPage.options[selectedIndex].value; var csrftoken=getParameterByNameOWASP\u csrftoken,form.action; 如果选择值=='A'{ form.action=A.html?OWASP_CSRFTOKEN=+CSRFTOKEN; } 如果选择值=='LA'{ form.action=helloWorld.do?OWASP_CSRFTOKEN=+CSRFTOKEN; } 提交表格; }; 从此下拉列表中选择请求页面 登录页 一页 ->
在Owasp.CsrfGuard.properties中,设置org.Owasp.CsrfGuard.TokenPerPage=false

原因:

使用每页唯一令牌属性目前处于试验阶段, 但提供了大量改进的安全性。考虑使用传统的唯一会话模型对CSRF令牌进行曝光。


参考资料:

您从jsp的何处获取“csrftoken”?@MohithMaratt:Hi Mohith,这个标记是从这个servlet类org.owasp.csrfguard.servlet.JavaScriptServlet生成的,这个类在web.xml文件中映射了这个url/JavaScriptServlet&我从应用程序的每个页面调用这个servlet,就像&你可以从我附带的代码片段中注意到这一点。我已经在我的应用程序中附加了与CSRFGuard相关的所有配置细节。请注意所有这些,它们可能会得到更好的理解。Thx.页面A的隐藏元素应包含一个新标记。由于您获得了相同的令牌,我猜可能是您的csrf配置不正确,或者您一直在设置它。您可以在owasp库中调试并查看新令牌是否在发送到页面之前到达servlet和其他代码。但是,只有在提交表单时,才会更新上的action in页面中的令牌。