2014-11-17 16 views
5

Qual è il modo preferito per gestire i moduli memorizzati nella cache e il token CSRF? Here propongono una sovrascrittura JS dell'attributo input, ma voglio anche memorizzare l'intestazione nella cache.Framment caching & CSRF

risposta

4

Questo è un articolo che descrive diversi metodi: http://www.fastly.com/blog/Caching-the-Uncacheable-CSRF-security/.

Un breve riassunto:

  1. Utilizzando ESI (Bordo Side Includes): il rendering un segnaposto in Rails, che si riempie con il CSRF token di seguito.
  2. Incluso il token CSRF in un cookie e copiarlo nel modulo tramite javascript.
  3. Scaricare il token in una richiesta AJAX separata e copiarlo nel modulo tramite javascript.

mio prendere:

È necessario impostare l'infrastruttura speciale per l'utilizzo di ESI, quindi non mi piace questa soluzione. Le richieste AJAX sono lente e un sacco di spese di rete, quindi non mi piace anche quella soluzione ... Quindi vorrei andare con la soluzione dei cookie o con la soluzione JS che hai già menzionato, dal momento che queste sono le soluzioni più semplici.

+0

Questo non risolve il fatto che per impostazione predefinita i binari inseriranno un campo nascosto in tutti i moduli che include il token CSRF. Questo modulo sarà ancora memorizzato nella cache. Anche se gli errori di token non validi andranno via, stai perdendo i token dei tuoi utenti ad altri utenti in questa cache. – phylae

1

questo funziona per me. Ho appena tenuto questo nel mio application.js e tutto funziona perfettamente.

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     var csrf_value = $("meta[name='csrf-token']").attr("content"); 
     xhr.setRequestHeader("X-CSRF-Token", csrf_value); 
    }, 
    });