/ / Prevenzione della falsificazione delle richieste su più siti utilizzando il token struts - java, struts, cross-domain, struts-1

Prevenzione della contraffazione delle richieste di cross-site usando token puntone - java, struts, cross-domain, struts-1

Voglio implementare la falsificazione di richieste tra sitiprevenzione per la mia applicazione web che si basa sul framework 1.x struts. So che struts 2 framework fornisce intercettore token per questo e posso implementare funzionalità simili usando i filtri.

Sono un po 'confuso riguardo a pochi pensieri 1) come posso generare token univoci in modo semplice? (posso usare il token della classe Action per questo scopo che viene utilizzato per evitare l'invio di moduli duplicati)

Esistono problemi nell'utilizzo del meccanismo token framework struts 1.x per la prevenzione CSRF

risposte:

17 per risposta № 1

I metodi token di Struts 1 Action funzionano comeIntercettore di token Struts 2 in quanto aggiungerà un token alla sessione e lo controllerà all'invio del modulo, ma è un processo molto più manuale. Il flusso di lavoro di base è:

  1. L'utente accede al modulo tramite un'azione Struts (non direttamente al JSP). L'azione Struts chiamerà saveToken(request) prima di inoltrare sul JSP che contiene il modulo.
  2. Il modulo sul JSP deve utilizzare il <html:form> etichetta.
  3. La tua azione a cui invia il modulo chiamerà per prima isTokenValid(request, true)e dovresti reindirizzare alla prima Azione con un messaggio di errore se ritorna false. Ciò reimposta anche il token per la richiesta successiva.

In questo modo non solo si eviterà il modulo duplicatoinvii, ma qualsiasi script dovrà colpire la prima azione Struts e ottenere una sessione prima che possa inviare alla seconda azione Struts per inviare il modulo. Poiché un sito non può impostare una sessione per un altro sito, ciò dovrebbe impedire CSRF.

Se di solito invii utenti direttamente al tuo JSP, non "t. Invece, crea una nuova classe che eredita da ActionForward e impostalo così com'è execute() metodo:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}