X-CSRF-Token-Header global zu allen Instanzen von XMLHttpRequest () hinzufügen;

8

Ich verwende eine Bibliothek von Drittanbietern, die eine rohe XMLHttpRequest mit new XMLHttpRequest hervorbringt.

Dies umgeht meinen CSRF-Schutz und wird von meinem Rails-Server abgeschossen.

Gibt es eine Möglichkeit, global ein vordefiniertes CSRF-Token ( $('meta[name=csrf-token]').attr('content') ) allen Instanzen von XMLHttpRequest zur Instanziierungszeit hinzuzufügen?

    
Abraham P 13.06.2014, 00:48
quelle

3 Antworten

22

Ich würde empfehlen Aufrufe auf die Methode send zu abfangen:

%Vor%

Dies fügt den Header nicht zur Instanziierungszeit hinzu, sondern direkt bevor die Anfrage gesendet wird. Sie können auch Aufrufe von new XMLHttpRequest() abfangen, aber das ist nicht hilfreich, da Sie mit dem Hinzufügen der Kopfzeile warten müssen, bis open aufgerufen wurde.

Sie möchten vielleicht auch einen Test für die Ziel-URL der Anfrage einfügen, so dass Sie nur die Kopfzeile hinzufügen, wenn Ihre eigene API aufgerufen wird. Anderenfalls könnte das Token an anderer Stelle undicht werden oder sogar domänenübergreifende CORS-Aufrufe, die diesen Header nicht zulassen, unterbrochen werden.

    
Bergi 13.06.2014, 01:16
quelle
4

Sie können die zu öffnende ajax open () -Methode umbrechen und dann die Überschrift sofort setzen:

%Vor%     
dandavis 13.06.2014 01:13
quelle
1

Wenn Sie eine Jquery-unabhängige Lösung benötigen, können Sie Folgendes verwenden:

%Vor%     
ErvalhouS 25.10.2017 14:16
quelle