ホームページ  >  記事  >  PHPフレームワーク  >  Laravelのフォーム偽造とCSRF保護

Laravelのフォーム偽造とCSRF保護

齐天大圣
齐天大圣オリジナル
2020-12-14 11:23:311547ブラウズ

現在最も人気のある API 設計仕様は、restFul API 設計であることがわかっています。 Restful には、get、post、put、patch、delete という 5 つの一般的な HTTP メソッドがあります。 HTML フォームを使用して get メソッドまたは post メソッドを構築するのは非常に簡単ですが、他の 3 つのメソッドはサポートされていません。しかし、laravelでは、フォーム偽造技術を通じて上記の他の3つの方法を使用できます。

推奨チュートリアル: "laravel Framework"

準備作業

まずは準備をする必要がありますよくやった。フォーム ルートとフォームを受け入れるルートの 2 つのルートを作成する必要があります。

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

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

最初に、最も単純な取得リクエスト フォームを作成しました。内容は次のとおりです。

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

送信ボタンをクリックすると、ブラウザに「GET」が表示され、取得が完了したことを示します。リクエストは正常に送信され、受け入れられました。

CSRF 保護

次に、post メソッドに変更し、更新して送信ボタンをクリックして、何が起こるかを確認します。 「ページの有効期限が切れました」というエラーとステータス コード 419 が表示されます。なぜlaravelは投稿リクエストを受け入れられないのでしょうか?ここでは、laravelのデフォルトのCSRF保護メカニズムを紹介します。

クロスサイトリクエストフォージェリ攻撃を防ぐために、laravel は CSRF トークン保護を提供します。したがって、get メソッドリクエストを除くすべてのメソッドについて、リーダーは次のように CSRF トークンをフォームに追加する必要があります。 ##

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

以下のような省略方法もあります。

@csrf

CSRF保護機能をオフにする

一般的にはサイト全体の CSRF 機能をオフにすることはお勧めできません。オフにするのは非常に簡単で、Kernel.php ファイルの

\App\Http\Middleware\VerifyCsrfToken::class

行をコメント アウトするだけです。

CSRF ホワイトリスト

サードパーティが提供する API インターフェイスなど、CSRF 保護を必要としない URL のグループを設定する必要があることがよくあります。すべての外部 API インターフェイスが CSRF 保護を必要としないことが望まれます。次に、CSRF ホワイトリスト関数を使用して、app/Http/Middleware/VerifyCsrfToken.php ファイルにホワイトリストを設定できます。次のとおりです:

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;
    ];
}

注: テストを容易にするために、環境をテストするときに csrf 機能が自動的にオフになります

#フォーム偽造

CSRF 保護メカニズムを学習した後、フォームを偽造する方法を見てみましょう。フォームを偽造するのも非常に簡単です。フォームに

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

または省略形の

@method(&#39;PUT&#39;)

を追加するだけです。以下は、Put リクエスト

@csrf @method(&#39;PUT&#39;)
を偽造するためのフォームです。

以上がLaravelのフォーム偽造とCSRF保護の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。