2014-04-05 6 views
5

EDIT: Ich hätte dies am Anfang sagen sollen, ich benutze AngularJS in der FronEnd, und ich mache alle Anfragen über XHR. Ich entwickle eine Anwendung mit CSRF Token für jede Benutzeranforderung.Laravel CSRF Token

Sollte ich die Token nach jeder Anfrage regenerieren?

So etwas wie

Session::forget("_token") and Session::put("_token", RANDOM_SOMETHING) 

Oder ist es genug, um die gleiche Session jeder Benutzer zu benutzen?

Gibt es einen Vorteil?

+0

Was Sie für das Token verwenden? Angenommen, Sie verwenden es für etwas anderes als XSS zu verhindern, ist es schwer zu sagen, ob es für Ihr Szenario "gut" ** genug ist. – Sam

+0

@Sam Token für XSS? – itachi

+0

@itachi Laravel CSRF-Token wird verwendet, um Cross-Site-Anfragen (in der Regel XSS) zu verhindern.Es ist ein Token, das in der Sitzung der Website gespeichert und bei jeder Formularübermittlung gesendet wird. Daher muss ein Formular von der Website mit der Sitzung gesendet werden, um die richtige Sitzung zu erhalten. Dann wird eine Anfrage mit Cross-Site-Scripting vorgetäuscht. – Sam

Antwort

4

Laravel sollte dies für Sie tun, Sie brauchen nicht auf die Erstellung/Löschen von _token

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 

Siehe ‚CSRF-Schutz‘ Abschnitt in der Dokumentation hier zu verwalten: http://laravel.com/docs/security

+0

Ich benutze AngularJS in der FronEnd, im Senden der CSRF-Token auf jeder XHR-Anfrage, nicht im Umgang mit der regulären Art –

+1

Ich habe versucht mit Session :: Token() und andere Methoden zum Abrufen des Tokens, aber Laravel nicht Renegerates der Token, Meine Frage war, ob ich den Token wieder aktivieren sollte oder einfach denselben auf der gesamten Sitzung verwenden sollte –

2

Hängt . Wenn der Angreifer kein MITM ist, da er den Datenverkehr zwischen Ihrer Webanwendung und dem API-Server nicht belauschen kann, sollte ein einzelnes CSRF-Token für die gesamte Sitzung ausreichen.

Vorausgesetzt, dass Sie sensible Vorgänge auch auf der Serverseite schützen (dh Zugriff auf Ressourcen nur dem Eigentümer der Ressource erlauben, zB "mein Konto löschen" usw.), würde das Token sicherstellen, dass der Browser die Anfrage stellt der legitime, authentifizierte Benutzer Browser. Das ist alles, worüber du dich sorgen solltest, denke ich.

Auf der anderen Seite, wenn der Angreifer in der Lage ist, nicht sicheren Datenverkehr zwischen der Webanwendung und Ihrer API zu betrachten, kann er das CSRF-Token und Ihre Session-ID abrufen und bösartiges Zeug transparent machen. In einem solchen Fall macht das Gewähren, Verwenden und anschließende Verwerfen eines Tokens für jede Anfrage (POST oder jede Art, die eine sensible Operation durchführt) ihre Arbeit nur ein wenig schwieriger, aber Sie sind immer noch dem Untergang geweiht.

My 2 cents ...

+0

Diese Antwort sollte vom OP akzeptiert werden, da es der einzige ist, der tatsächlich versucht, seine Frage zu beantworten. –

7

Mit Laravel 5 Blades Vorlagen, es ist ziemlich einfach.

Wenn Sie nur den Wert des csrf Token möchten, können Sie es durch Schreiben erzeugen:

{{ csrf_token() }} 

, die den Token-Wert wie folgt erzeugt:

7YC0Sxth7AYe4RFSjzaPf2ygLCecJhPbyXhz6vvF 

Wenn Sie Mithilfe von Formularen können Sie die folgende Codezeile in das Formular einfügen:

{{ csrf_field() }} 

die html wie folgt generieren:

<input type="hidden" name="_token" value="7YC0Sxth7AYe4RFSjzaPf2ygLCecJhblahblah">