Ich versuche, meine Webanwendung vor CSRF-Angriffen zu schützen, indem ich den Struts-Token-Interceptor verwende.Struts2-Token-Interceptor: CSRF-Schutz
Das Problem, mit dem ich gerade konfrontiert bin, ist unsere JSP-Seiten macht mehr als einen Aufruf an Server (Während JSP in JS umgewandelt wird, wird ein Struts-Token zu JS hinzugefügt. Aber in diesem JS gibt es mehrere Ajax-Anfragen. Ich hoffe ich mache ich mich klar.), wegen Token Interceptor wird nur die erste Anfrage an den Server validiert. Andere Anforderungen werden ungültig, weil das Struts-Token nach jeder Überprüfung zurückgesetzt wird.
Gibt es eine Möglichkeit, dass ich Struts das Token jedes Mal zurücksetzen, wenn es validiert? IS gibt es irgendwelche anderen Lösungen, um dies in Struts Interceptor zu behandeln.
Ich sehe auch tomcatcsrfprotection
Modul, ich denke, ich werde mit dem gleichen Problem hier auch enden.
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>
Ich habe nur minimalen Code hinzugefügt, so dass das Verständnis wird es leichter sein.
Was meinst du * Jsp Seiten macht mehr als einen Aufruf an Server *? –
Ich muss mehrere AJAX-Anfrage mit dem gleichen Token auf der Client-Seite machen. – Mok
Während jsp in js konvertiert wird, wird ein struts-Token zu js hinzugefügt. In diesem js gibt es mehrere Ajax-Anfrage. Ich hoffe, ich mache mich klar. – Mok