Heim  >  Artikel  >  PHP-Framework  >  Formularfälschung und CSRF-Schutz von Laravel

Formularfälschung und CSRF-Schutz von Laravel

齐天大圣
齐天大圣Original
2020-12-14 11:23:311616Durchsuche

Wir wissen, dass die derzeit beliebteste API-Designspezifikation das restFul API-Design ist. Restful verfügt über fünf gängige HTTP-Methoden: get, post, put, patch und delete. Es ist sehr einfach, die Get- oder Post-Methode mithilfe des HTML-Formulars zu erstellen, die anderen drei Methoden werden jedoch nicht unterstützt. Aber in Laravel können Sie die anderen drei oben genannten Methoden durch Formularfälschungstechnologie verwenden.

Empfohlenes Tutorial: „Laravel-Framework

Vorbereitungsarbeiten

Zunächst müssen wir die Vorbereitungsarbeiten durchführen. Wir müssen zwei Routen erstellen: eine Formularroute und eine Route, die Formulare akzeptiert.

// 表单页
Route::get('form', function () {
    return view('form');
});

// 接受表单请求
Route::any('getform', function () {
    return \Illuminate\Support\Facades\Request::method();
});

Zu Beginn haben wir das einfachste Get-Anfrageformular erstellt. Der Inhalt lautet wie folgt:

<form method="get" action="/getform">
    <input type="submit" value="sub" />
</form>

Nachdem Sie auf die Schaltfläche „Senden“ geklickt haben, erscheint „GET“ im Browser und zeigt an, dass die Get-Anfrage erfolgreich gesendet und akzeptiert wurde.

CSRF-Schutz

Dann wechseln wir zur Post-Methode, aktualisieren dann und klicken auf die Schaltfläche „Senden“, um zu sehen, was passiert. Sie werden einen Fehler mit „Seite abgelaufen“ und dem Statuscode 419 finden. Warum kann Laravel keine Post-Anfragen annehmen? Hier stellen wir den standardmäßigen CSRF-Schutzmechanismus von Laravel vor.

Laravel bietet CSRF-Token-Schutz, um Cross-Site-Request-Forgery-Angriffe zu verhindern. Daher müssen Sie für alle Methoden außer der Get-Methode-Anfrage das CSRF-Token wie folgt zum Formular hinzufügen:

<input type="hidden" name="_token" value="{{csrf_token()}}">

Es hat auch die Abkürzung The Die Methode lautet wie folgt:

@csrf

Schalten Sie die CSRF-Schutzfunktion aus

Es wird im Allgemeinen nicht empfohlen, die CSRF-Funktion der gesamten Site auszuschalten. Es ist sehr einfach, sie auszuschalten. Kommentieren Sie einfach das

\App\Http\Middleware\VerifyCsrfToken::class

Zeile in der Datei Kernel.php. Wir hoffen, dass alle externen API-Schnittstellen keinen CSRF-Schutz erfordern. Anschließend können Sie die CSRF-Whitelist-Funktion verwenden, um die Whitelist in der Datei app/Http/Middleware/VerifyCsrfToken.php festzulegen. Wie folgt:

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        /* 这里是白名单列表 */
        &#39;http://example.com/api/*&#39;,
        &#39;api/*&#39;,
        &#39;a/b/*&#39;
    ];
}

Hinweis: Zur Vereinfachung des Testens wird die CSRF-Funktion beim Testen der Umgebung automatisch deaktiviert

Formularfälschung

Nachdem wir den CSRF-Schutzmechanismus kennengelernt haben, werfen wir einen Blick darauf wie man Formularfälschungen durchführt. Es ist sehr einfach, ein Formular zu fälschen. Fügen Sie einfach

<input type="hidden" name="_method" value="PUT">

hinzu oder kürzen Sie es zu

@method(&#39;PUT&#39;)
ab. Das Folgende ist ein Formular zum Fälschen einer Put-Anfrage
@csrf @method(&#39;PUT&#39;)

Das obige ist der detaillierte Inhalt vonFormularfälschung und CSRF-Schutz von Laravel. 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