2014-05-07 9 views
6

Sto provando a proteggere la mia applicazione Web dagli attacchi CSRF utilizzando l'intercettore token puntone.Interceptor token Struts2: protezione CSRF

Il problema che sto affrontando in questo momento è nelle nostre pagine JSP rende più di una chiamata al server (Mentre JSP viene convertito in un JS puntoni token viene aggiunto alla JS.But in questo JS ci sono più richiesta Ajax. Spero di mi sto chiarendo.), a causa dell'intercettore di token, solo la prima richiesta al server viene convalidata. Altre richieste vengono invalidate perché il token struts viene ripristinato dopo ogni convalida.

C'è un modo per impedire a Struts di reimpostare il token ogni volta che viene convalidato? Esistono altre soluzioni per gestire questo in interceptor dei montanti.

Sto anche guardando il modulo tomcatcsrfprotection, credo che finirò con lo stesso problema anche qui.

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> 

Ho appena aggiunto il codice minimo in modo che la comprensione sarà più facile.

+0

Che cosa intendi * le pagine jsp effettuano più di una chiamata al server *? –

+0

Ho bisogno di fare più richieste Ajax utilizzando lo stesso token nella pagina del client. – Mok

+0

Mentre jsp viene convertito in js, un token puntone viene aggiunto a js. In questo js ci sono più richieste Ajax. Spero di essere chiaro. – Mok

risposta

2

È possibile utilizzare il codice nella mia risposta per Unable to implement Struts 2 token interceptor with hyperlink per creare un'azione che restituisce un token. È possibile utilizzare uno qualsiasi dei risultati stream o json o dispatcher per restituire un token come risultato di callback successo Ajax. È possibile trovare un esempio in jQuery Ajax - issue returning JSON value. Ora puoi usare il token per fare le tue richieste Ajax. Ogni volta che devi fare una nuova richiesta, devi chiamare un'azione token per ottenere un nuovo token. Usa il token come parametro per la tua richiesta e metti l'intercettore token davanti alle tue azioni.