Heim > Artikel > Backend-Entwicklung > Laravel-Middleware: Wird verwendet, um Cross-Site-Request-Forgery-Angriffe (CSRF) zu verhindern
Laravel-Middleware: Wird zur Verhinderung von Cross-Site-Request-Forgery-Angriffen (CSRF) verwendet.
Übersicht:
In Internetanwendungen sind Cross-Site-Request-Forgery-Angriffe (CSRF) eine häufige Bedrohung für die Netzwerksicherheit. CSRF-Angriffe fälschen böswillige Anfragen, um Benutzern die Durchführung illegaler Vorgänge ohne ihr Wissen zu ermöglichen, z. B. das Ändern von Passwörtern, Geldüberweisungen usw. Um diese Art von Angriffen zu verhindern, bietet Laravel eine integrierte Middleware, die Anwendungen problemlos vor CSRF-Angriffen schützen kann.
Verwendung von CSRF-Middleware:
In Laravel ist die Verwendung von CSRF-Middleware sehr einfach. Zuerst müssen wir die Middleware in der Routing-Datei der Anwendung registrieren. Öffnen Sie die Datei app/Http/Kernel.php
, suchen Sie die Middleware-Gruppe web
und fügen Sie die Middleware VerifyCsrfToken
hinzu, wie unten gezeigt: app/Http/Kernel.php
文件,找到web
中间件组,并在其中添加VerifyCsrfToken
中间件,如下所示:
protected $middlewareGroups = [ 'web' => [ // 其他中间件... AppHttpMiddlewareVerifyCsrfToken::class, ], // 其他中间件组... ];
当注册了该中间件后,Laravel会自动为每个请求生成一个token,并将其存储在session中。每次发送POST、PUT、DELETE请求时,Laravel会比对请求中的token和存储在session中的token是否一致,如果不一致,则会拒绝请求并返回一个错误。
生成CSRF token:
Laravel提供了一个全局的csrf_token
辅助函数,用于在视图中生成一个CSRF token。在HTML表单中,我们可以通过在ff9c23ada1bcecdd1a0fb5d5a0f18437
标签中添加一个隐藏的输入域,并将该输入域的值设置为CSRF token,来保护该表单免受CSRF攻击。
<form method="POST" action="/submit"> @csrf <!-- 其他表单字段... --> <button type="submit">提交</button> </form>
在上面的示例中,我们使用了@csrf
指令来生成隐藏的CSRF token输入域。该指令会自动在生成的HTML中插入一个隐藏的d5fd7aea971a85678ba271703566ebfd
标签,其名称为_token
,值为CSRF token。
如果你使用Laravel内置的表单辅助函数(如Form::open
),则不需要手动添加CSRF token输入域,Laravel会自动为你生成。
手动验证CSRF token:
除了自动验证之外,Laravel也提供了手动验证CSRF token的方法,以便我们在控制器或路由回调中完成更细粒度的验证。我们可以使用csrf_token
辅助函数来获取当前请求的CSRF token,并通过调用Request
对象的session
方法来获取存储在session中的token。
下面是一个在控制器中手动验证CSRF token的示例:
<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesSession; class UserController extends Controller { public function updateProfile(Request $request) { $token = $request->input('_token'); if (!hash_equals(Session::token(), $token)) { // CSRF token验证失败 abort(403, 'Unauthorized action.'); } // CSRF token验证通过,继续处理操作 // ... } }
在上述示例中,我们使用了hash_equals
rrreee
CSRF-Token generieren:
csrf_token
-Hilfsfunktion zum Generieren eines CSRF-Tokens in der Ansicht. In einem HTML-Formular können wir das Formular vor CSRF-Angriffen schützen, indem wir ein verstecktes Eingabefeld im Tag ff9c23ada1bcecdd1a0fb5d5a0f18437
hinzufügen und den Wert des Eingabefelds auf das CSRF-Token festlegen. 🎜rrreee🎜Im obigen Beispiel haben wir die Direktive @csrf
verwendet, um ein verstecktes CSRF-Token-Eingabefeld zu generieren. Dieser Befehl fügt automatisch ein verstecktes d5fd7aea971a85678ba271703566ebfd
-Tag in den generierten HTML-Code ein, mit dem Namen _token
und dem Wert CSRF-Token. 🎜🎜Wenn Sie die integrierte Formularhilfsfunktion von Laravel verwenden (z. B. Form::open
), müssen Sie das CSRF-Token-Eingabefeld nicht manuell hinzufügen, Laravel generiert es automatisch für Sie. 🎜🎜CSRF-Token manuell überprüfen: 🎜Zusätzlich zur automatischen Überprüfung bietet Laravel auch eine Methode zur manuellen Überprüfung des CSRF-Tokens, sodass wir eine detailliertere Überprüfung im Controller oder Routing-Callback durchführen können. Wir können die Hilfsfunktion csrf_token
verwenden, um das CSRF-Token der aktuellen Anfrage abzurufen, und die in der Sitzung gespeicherte session
-Methode durch Aufrufen von Request
abrufen > Objekt. 🎜🎜Das Folgende ist ein Beispiel für die manuelle Überprüfung des CSRF-Tokens im Controller: 🎜rrreee🎜Im obigen Beispiel haben wir die Funktion hash_equals
verwendet, um zu vergleichen, ob das Token in der Anfrage mit dem Token in übereinstimmt Die Sitzung stellt die Sicherheit der CSRF-Token-Überprüfung sicher. 🎜🎜Zusammenfassung: 🎜Die CSRF-Middleware von Laravel bietet eine einfache, aber leistungsstarke Möglichkeit, Cross-Site-Request-Forgery-Angriffe zu verhindern. Durch die automatische Generierung und Validierung von CSRF-Tokens können wir unsere Anwendungen wirksam vor böswilligen Anfragen schützen. Ob automatische oder manuelle Verifizierung, Laravel bietet uns flexible und zuverlässige Optionen zur Absicherung unserer Anwendungen. 🎜Das obige ist der detaillierte Inhalt vonLaravel-Middleware: Wird verwendet, um Cross-Site-Request-Forgery-Angriffe (CSRF) zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!