2014-05-07 25 views
6

Tôi đang cố bảo vệ ứng dụng web của mình khỏi các cuộc tấn công CSRF bằng cách sử dụng trình chặn chặn mã vạch struts.Thiết bị chặn mã thông báo Struts2: Bảo vệ CSRF

Vấn đề tôi đang gặp phải hiện nay là các trang JSP của chúng tôi thực hiện nhiều cuộc gọi đến máy chủ (Trong khi JSP được chuyển thành JS, mã thông báo struts được thêm vào JS.But trong JS này có nhiều yêu cầu Ajax. đang làm cho bản thân mình rõ ràng.), bởi vì interceptor token chỉ yêu cầu đầu tiên đến máy chủ là nhận được xác nhận. Các yêu cầu khác sẽ bị vô hiệu vì mã thông báo struts được đặt lại sau mỗi lần xác thực.

Có cách nào tôi dừng Struts khỏi đặt lại mã thông báo mỗi khi mã xác thực không? IS có bất kỳ giải pháp khác để xử lý điều này trong thanh chống đánh chặn.

Tôi cũng đang xem mô hình tomcatcsrfprotection, tôi đoán tôi sẽ kết thúc với cùng một vấn đề ở đây.

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> 

Tôi vừa thêm mã tối thiểu để hiểu biết nó sẽ được dễ dàng hơn.

+0

Ý của bạn là gì * trang jsp thực hiện nhiều cuộc gọi đến máy chủ *? –

+0

Tôi cần thực hiện nhiều yêu cầu ajax bằng cách sử dụng cùng một mã thông báo trong trang khách hàng. – Mok

+0

Trong khi jsp được chuyển thành js, mã thông báo struts được thêm vào js. Trong js này có nhiều yêu cầu Ajax. Tôi hy vọng tôi làm cho bản thân mình rõ ràng. – Mok

Trả lời

2

Bạn có thể sử dụng mã trong câu trả lời của mình cho Unable to implement Struts 2 token interceptor with hyperlink để tạo hành động trả về mã thông báo. Bạn có thể sử dụng bất kỳ kết quả nào stream hoặc json hoặc dispatcher để trả về mã thông báo dưới dạng kết quả gọi lại thành công Ajax. Bạn có thể tìm thấy một ví dụ trong jQuery Ajax - issue returning JSON value. Bây giờ bạn có thể sử dụng mã thông báo để thực hiện các yêu cầu Ajax của bạn. Mỗi khi bạn cần thực hiện một yêu cầu mới, bạn nên gọi một hành động mã thông báo để nhận mã thông báo mới. Sử dụng mã thông báo làm tham số cho yêu cầu của bạn và đặt trình chặn chặn mã thông báo ở phía trước hành động của bạn.

Các vấn đề liên quan