Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel-Middleware: Wird verwendet, um Cross-Site-Request-Forgery-Angriffe (CSRF) zu verhindern

Laravel-Middleware: Wird verwendet, um Cross-Site-Request-Forgery-Angriffe (CSRF) zu verhindern

WBOY
WBOYOriginal
2023-07-30 16:27:29798Durchsuche

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_equalsrrreee

Wenn die Middleware registriert ist, generiert Laravel automatisch ein Token für jede Anfrage und speichert es in der Sitzung. Jedes Mal, wenn eine POST-, PUT- oder DELETE-Anfrage gesendet wird, vergleicht Laravel das Token in der Anfrage mit dem in der Sitzung gespeicherten Token. Wenn sie inkonsistent sind, wird die Anfrage abgelehnt und ein Fehler zurückgegeben.


CSRF-Token generieren:

Laravel bietet eine globale 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 Requestabrufen > 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn