Lösung: 1. Verwenden Sie Laravel, um für jede Benutzersitzung automatisch ein „CSRF-Token“ zu generieren. Dieses Token kann verwendet werden, um zu überprüfen, ob der angemeldete Benutzer und der Anforderer dieselbe Person sind. 2 . Geben Sie die globale Hilfefunktion „csrf_token“ an, um den Token-Code im Ansichtsübermittlungsformular zu erhalten. Die Syntax lautet „<...value php="">". .
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 9, Dell G3-Computer.
CSRF ist die englische Abkürzung für Cross-Site Request Forgery;
Das Vermeiden von CSRF-Angriffen im Laravel-Framework ist sehr einfach:
1. Laravel stellt automatisch eine Lösung für jeden Benutzer bereit CSRF-Token, mit dem überprüft werden kann, ob der angemeldete Benutzer und der Anforderer dieselbe Person sind. Andernfalls schlägt die Anfrage fehl. (Das Prinzip ist das gleiche wie beim Bestätigungscode.)
2. Laravel bietet eine globale Hilfsfunktion csrf_token, um den Token-Wert zu erhalten, sodass Sie nur den folgenden HTML-Code zum Ansichtsübermittlungsformular hinzufügen müssen, um das Token einzufügen Anfrage:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
Fall: Implementieren Sie die Überprüfung des CSRF-Mechanismus durch Fälle
1. Erstellen Sie zwei Routen, eine zum Anzeigen des Formulars (get) und die andere zum Verarbeiten von Anfragen (post)
Route::get('test6','Home\TestController@test6');Route::post('test7','Home\TestController@test7');
2. Erstellen Sie die Anforderungsmethode
public function test6(){ return view('home.test.test6'); } public function test7() { return "请求提交成功"; }
3. Erstellen Sie das einfache Formular, das Sie benötigen. Senden Sie den Effekt (Fehlerseite). Fazit: Durch den Fall gerade wird gezeigt, dass die csrf Der Verifizierungsmechanismus in Laravel ist standardmäßig aktiviert.
5. Lösen Sie das Fehlerproblem (wie man die CSRF-Überprüfung besteht) Lösung: Bringen Sie den für CSRF erforderlichen Token-Wert und übergeben Sie ihn mit der Anfrage an die nachfolgende Methode
<form action="/home/test/test7" method="post"> 用户名:<input type="text" name="username"><br> <input type="hidden" name="_token" value="{{csrf_token()}}"> {{csrf_field()}} <input type="submit" value="提交"></form>
Vereinfachung der csrf_token-Methode: {
{csrf_field( )}}Spezifische Ausdrucksform:
Der Unterschied zwischen den beiden:
Csrf_field gibt ein gesamtes verstecktes Eingabefeld aus.
Wie man es bei späterer Verwendung auswählt: In den meisten Fällen In bestimmten Fällen können Sie die Situation selbst auswählen. Es gibt jedoch eine Situation, in der der Entwickler kein Wahlrecht hat und csrf_token verwenden muss. In diesem Fall wird die asynchrone Formularübermittlungsmethode verwendet.Ausnahmerouten von der CSRF-Validierung ausschließen
Nicht alle Anfragen müssen CSRF-Angriffe vermeiden, wie etwa Anfragen an APIs von Drittanbietern, um Daten abzurufen.
Sie können die auszuschließende Anforderungs-URL zum Attributarray $exclusive in der VerifyCsrfToken-Middleware (app/Http/Middleware/VerifyCsrfToken.php) hinzufügen:
Schreiben eines einzelnen Routenausschlusses
'home.test.test6',
'home.test.test6','home.test.test7'
'*'
[Verwandte Empfehlungen:
Laravel-Video-Tutorial
Das obige ist der detaillierte Inhalt vonLösung für CSRF-Angriff in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!