簡體   English   中英

Struts2令牌攔截器:CSRF保護

[英]Struts2 token interceptor: CSRF protection

我正在嘗試通過使用Struts令牌攔截器來保護Web應用程序免受CSRF攻擊。

我現在面臨的問題是我們的JSP頁面對服務器進行了多次調用(雖然JSP轉換為JS,但在JS中添加了一個struts令牌。但是在此JS中,有多個Ajax請求。希望我能使自己更清楚。),因為令牌攔截器只有對服務器的第一個請求得到了驗證。 其他請求正變得無效,因為每次驗證后都會重置struts令牌。

有沒有一種方法可以阻止Struts在每次驗證時重置令牌? 是否有其他解決方案可在struts攔截器中進行處理。

我也在看tomcatcsrfprotection模塊,我想我在這里也會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>

我剛剛添加了最少的代碼,以便於理解。

您可以在我的答案中使用代碼“ 無法實現帶有超鏈接的Struts 2令牌攔截器”來創建返回令牌的操作。 您可以使用任何結果streamjsondispatcher來返回令牌作為Ajax成功回調結果。 您可以在jQuery Ajax中找到一個示例-返回JSON值 現在,您可以使用令牌發出Ajax請求。 每次您需要發出新請求時,都應調用令牌操作以獲取新令牌。 將令牌用作請求的參數,並將令牌攔截器置於操作之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM