Ich würde Ihnen empfehlen einen Blick auf das Rails-backbone Projekt zu übernehmen. Insbesondere die Datei backbone_rails_sync.js.
Es zeigt, wie dieses Gem die CSRF-Token-Daten zusammen mit einer beliebigen Ajax-Anfrage an den Server sendet.
Hier sind auch einige docs by the Django project, die Ihnen ein Beispiel geben, wie Sie die standardmäßige jQuery ajax() - Methode überschreiben, um immer ein CSRF-Token zu senden.
basierend auf Kommentar aktualisiert:
Also, was Sie wo zu fragen ist, wie CSRF zu implementieren, wenn nichts anderes als ein REST-API und keine Verwendung von Ansichten/Formulare in irgendeiner Weise verwendet werden.
Die Antwort lautet: nicht enthalten CSRF-Schutz.
Cross-site request forgery ist eine Möglichkeit, bei der eine andere (bösartige) Website eine Anforderung reproduziert oder imitiert und sich als gültiger Benutzer beim Senden ungültiger Daten an den Server verhält.
Dies ist nur ein Problem, wenn ein Benutzer authentifizieren muss und der Authentifizierungsstatus im Cache gespeichert wird (um zwischen den Seitenaufrufen zu bestehen). Wenn eine bösartige Website diesen Cache entführt, kann sie Daten übermitteln, während sie vorgibt, dieser Benutzer zu sein, ohne dass der Benutzer und der Server dies jemals bemerken. Dies ist, was CSRF-Schutz beauftragt wird, es fügt eine spezielle Zeichenfolge in das Formular, die nur für diese bestimmte Anfrage und ist einzigartig für jede andere Anfrage, so dass selbst wenn die Sitzung entführt wird, verhindert der CSRF-Schutz jede Änderung an der Server.
In Ihrem Fall jedoch verwenden Sie HTTP-API-Aufrufe und müssen daher Ihre Authentifizierung jede Anfrage über die Verwendung der Authorization header
senden. Auf diese Weise werden die Anmeldeinformationen niemals zwischengespeichert und können nicht entführt werden. Daher ist kein CSRF-Schutz erforderlich.
Es gibt jedoch auch andere Möglichkeiten, um Ihre RESTful API ist sicher zu stellen Sie sicher:
- Immer Daten senden über den Draht in verschlüsselter Form (https/ssl)
- Verwenden Sie eine gute Authentifizierungsmethode wie oAuth (2), API Tokens oder Basic HTTP Authentication (die letzten beiden sind weniger sicher, aber immer noch sicher genug für kleinere Anwendungen)
- Überprüfen Sie immer alle Werte in Ihrer Anwendung, bevor Sie auf sie reagieren
danke für ihre information. Aber vielleicht ein Missverständnis. – qwert
danke für Ihre Information. Aber vielleicht ein Missverständnis. Eigentlich möchte ich wissen, wie man den csrf-Token bekommt, wenn ich nur eine Ajax-Anfrage sende?
Ich habe einige Posts gelesen, die sagen "<% = csrf_meta_tag%> " im Layout von .html oder .erb. Aber mein Client verwendet nur die restliche API, also kein Formular/UI von der Serverseite vor dem Senden einer AJAX-Anfrage, daher ist die obige Lösung ungültig. Kann ich eine spezielle Ajax-Anfrage an den Server senden, um zuerst das CSRF-Token zu erhalten und dann eine Ajax-Anfrage mit diesem CSRF zu senden? Oder andere Lösungen? – qwert
Ich habe meine Antwort basierend auf Ihrem Kommentar aktualisiert. Kurzum: Sie brauchen in Ihrem Fall keinen CSRF-Schutz. – JeanMertz