2014-07-19 7 views
5

Ich erstelle Formulare, und es spielt keine Rolle, wie ich es tue, das CSRF-Token ist immer das Gleiche!Laravel 4 - CSRF-Token ändert sich nie

Es kommt tut, wenn ich

{{ Form::open([route' => 'login']) ]] 

verwenden oder wenn ich

verwenden
{{ Form::token() }} 

Es ist die gleiche jedes Mal. Sogar nachdem ich eine erfolgreiche Formularübermittlung mache. Ich dachte, es würde verbraucht werden und ein neues würde erzeugt werden, aber nein!

Habe ich einen Konfigurationsschritt vermisst?

Hinweis: Ich weiß, dass, wenn die laravel_session regeneriert wird, die _token anders, aber wie ich sie verstehe hatte, die CRSF Token war auch der Mechanismus mehrere Formularübermittlungen, zu vermeiden, so sollte es auf jeder Aktualisierung der Seite ändern oder zumindest nachdem nach einer erfolgreichen Posteinreichung konsumiert wurde, nein?

+0

Woher haben Sie gelesen, dass 'CRSF-Token auch der Mechanismus war, um Mehrfachformulare zu vermeiden ', bitte? – delmadord

+0

Es wurde auch hier diskutiert http://stackoverflow.com/questions/17239586/laravel-4-prevent-multiple-form-submissions-csrf-token – delmadord

+0

Während dieser Beitrag eine Methode zur Vermeidung von Form Wiedervorlage zu erklären, erklärt es nicht Das Verhalten bezüglich des Tokens wird nicht konsumiert. Ich würde das gerne knacken, weil es wie ein Sicherheitsloch aussieht. –

Antwort

9

Es ist nicht notwendig, das CSRF-Token für jede Anfrage zu aktualisieren, die Generierung des Tokens pro Sitzung ist auch sicher. Werfen Sie einen Blick auf die Owasp cheat sheet für eine bessere Erklärung.

Das Token für jede Anforderung neu generieren kann durchgeführt werden, kann aber zu Problemen bei der Benutzerfreundlichkeit führen. Ich denke, das ist der Grund, warum Laravel den Token-pro-Session-Ansatz implementiert.

+0

Vielen Dank, das ist eine erschöpfende Erklärung. Es scheint am Ende das erwartete Verhalten zu sein. –

+0

Wenn ich mich abmelde und mich wieder anmelde, zählt das als Sitzungsänderung? Ich meine, wenn ich mich auslogge und mich wieder anmelde, wird sich der Token ändern? – Rohan

+0

@Rohan - Eigentlich hängt es davon ab, was die Anwendung tun wird, wenn sich der Benutzer abmeldet. Technisch gesehen kann ein Sitzungscookie gültig bleiben, bis der Browser geschlossen wird, obwohl die Sitzung oft verworfen wird, wenn sich der Benutzer abmeldet. – martinstoeckli

1

Aus dem Code sind die einzigen relevanten Vorkommen von _token oder regenerateToken in der Illuminate/Session/Store, Linien 89, 551 und 571. Die Vorkommen sind:

public function start() 
{ 
    $this->loadSession(); 

    if (! $this->has('_token')) $this->regenerateToken(); 

    return $this->started = true; 
} 

public function token() 
{ 
    return $this->get('_token'); 
} 

public function regenerateToken() 
{ 
    $this->put('_token', str_random(40)); 
} 

Das heißt, wird das Token nur, regeneriert, wenn sie nicht in Sitzungen anwesend. Sie müssen es selbst regenerieren, wenn Sie möchten, mit z. B. Session::forget('_token');