2014-11-17 8 views
5

Was ist die bevorzugte Möglichkeit, mit zwischengespeicherten Formularen und CSRF-Token umzugehen? Here Sie schlagen ein JS-Überschreiben des Eingabeattributs vor, aber ich möchte auch den Header zwischenspeichern.Fragment-Caching & CSRF

Antwort

4

Hier ist ein Artikel, der verschiedene Methoden beschreibt: http://www.fastly.com/blog/Caching-the-Uncacheable-CSRF-security/.

Eine kurze Zusammenfassung:

  1. Mit ESI (Edge Side Includes): einen Platzhalter in Rails machen, die Sie Token später mit dem CSRF füllen.
  2. Das CSRF-Token in einen Cookie einfügen und über Javascript in das Formular kopieren.
  3. Holen Sie das Token in einer separaten AJAX-Anfrage und kopieren Sie es über Javascript in das Formular.

Meine Meinung:

Sie benötigen spezielle Infrastruktur für den Einsatz von ESI einzurichten, so dass ich nicht wie die Lösung. AJAX-Anfragen sind langsam und viel Netzwerk-Overhead, also mag ich diese Lösung auch nicht ... Also würde ich mit der Cookie-Lösung oder mit der JS-Lösung, die Sie bereits erwähnt, gehen, da dies die einfachsten Lösungen sind.

+0

Dies entspricht nicht der Tatsache, dass Schienen standardmäßig ein verstecktes Feld in allen Ihren Formularen einfügen, die das CSRF-Token enthält. Dieses Formular wird weiterhin zwischengespeichert. Obwohl die ungültigen Token-Fehler verschwinden, werden die Token Ihrer Benutzer an andere Benutzer in diesem Cache weitergegeben. – phylae

1

das funktioniert für mich. Ich behielt das nur in meiner application.js und alles funktioniert einwandfrei.

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