現在最も人気のある 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 = [ /* 这里是白名单列表 */ 'http://example.com/api/*', 'api/*', 'a/b/*' ]; }
注: テストを容易にするために、環境をテストするときに csrf 機能が自動的にオフになります
#フォーム偽造
CSRF 保護メカニズムを学習した後、フォームを偽造する方法を見てみましょう。フォームを偽造するのも非常に簡単です。フォームに<input type="hidden" name="_method" value="PUT">
@method('PUT')
以上がLaravelのフォーム偽造とCSRF保護の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。