【问题标题】:Struts2 token interceptor: CSRF protectionStruts2 令牌拦截器:CSRF 保护
【发布时间】:2014-06-24 06:29:52
【问题描述】:

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

我现在面临的问题是我们的 JSP 页面不止一次调用服务器(当 JSP 转换为 JS 时,一个 struts 令牌被添加到 JS。但是在这个 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>

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

【问题讨论】:

  • 你是什么意思jsp页面多次调用服务器
  • 我需要在客户端页面中使用同一个令牌发出多个ajax请求。
  • 当 jsp 转换为 js 时,会在 js 中添加一个 struts 令牌。在这个 js 中有多个 Ajax 请求。我希望我能说清楚。
  • 您需要为每个 ajax 请求使用一个新的令牌。
  • 查看我对这个问题的回答:stackoverflow.com/q/18822095/1700321

标签: java javascript jsp struts2 csrf-protection


【解决方案1】:

您可以使用我对Unable to implement Struts 2 token interceptor with hyperlink 的回答中的代码来创建一个返回令牌的操作。您可以使用任何结果streamjsondispatcher 来返回一个令牌作为Ajax 成功回调结果。您可以在jQuery Ajax - issue returning JSON value 中找到示例。现在您可以使用令牌发出您的 Ajax 请求。每次您需要发出新请求时,您都应该调用令牌操作来获取新令牌。使用令牌作为请求的参数,并将令牌拦截器放在您的操作前面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2020-12-03
    • 2016-04-25
    相关资源
    最近更新 更多