一尘不染

Struts2令牌拦截器:CSRF保护

jsp

我正在尝试通过使用Struts令牌拦截器来保护Web应用程序免受CSRF攻击。

我现在面临的问题是我们的JSP页面对服务器进行了多个调用(虽然JSP转换为JS,但在JS中添加了一个struts令牌。但是在此JS中,有多个Ajax请求。希望我能使自己更清楚。),因为令牌拦截器只有对服务器的第一个请求得到了验证。其他请求正变得无效,因为每次验证后都会重置struts令牌。

有没有一种方法可以阻止Struts在每次验证时重置令牌?是否有其他解决方案可在struts拦截器中进行处理。

我也在看tomcatcsrfprotection模块,我想我在这里也会遇到同样的问题。

managepage.jsp

<s:token />
<script type="text/javascript">
var strutsToken = "<s:property value="#session['struts.tokens.token']" />";
var requestParams = {mainAction: 'loadGroups','struts.token.name': 'token' , token:strutsToken};

Ext.Ajax.request({
              url: 'manageUserAccount.action',
              params: Ext.urlEncode(requestParams),
              disableCaching: true,
              success: this.actionCallback
              });



//loading widgets

var requestParams = {mainAction: 'loadusers','struts.token.name': 'token' , token:strutsToken};

Ext.Ajax.request({
              url: 'manageUserAccount.action',
              params: Ext.urlEncode(requestParams),
              disableCaching: true,
              success: this.actionCallback
              });

</script>

Struts.xml

  <action name="manageUserAccountEdit" class="ManageUserAccountEditAction">
     <interceptor-ref name="csrf-protection" /> 
     <result name="success">/pages/manageUserAccount.jsp</result>
 </action>

我刚刚添加了最少的代码,以便于理解。


阅读 497

收藏
2020-06-08

共1个答案

一尘不染

您可以在我的答案中使用代码“ 无法实现带有超链接的Struts2令牌拦截器”来创建一个返回令牌的操作。您可以使用任何结果streamjsondispatcher返回令牌作为阿贾克斯成功回调的结果。您可以在jQueryAjax中找到一个示例-返回JSON值。现在,您可以使用令牌发出Ajax请求。每次您需要发出新请求时,都应调用令牌操作以获取新令牌。将令牌用作请求的参数,并将令牌拦截器置于操作之前。

2020-06-08