Laravel - CSRF保護
こんにちは、若手開発者さんたち!今日は、LaravelにおけるCSRF保護の世界に飛び込みます。プログラミングが新しい方也不用担心;私はあなたを一歩一歩ガイドします。これまでに多くの学生を指導してきた経験を活かしてです。一緒にこのエキサイティングな旅に出発しましょう!
CSRFとは?
Laravelの実装に飛び込む前に、CSRFとは何かを理解しましょう。CSRFはCross-Site Request Forgeryの略です。あなたがカフェでラテを楽しみながら、ラップトップで銀行口座を確認しているとします。突然、近くに座っている悪巧みなハッカーが、あなたのブラウザをだまして、あなたの口座から彼らの口座にお金を移すリクエストを送らせます。これがCSRFの実例です!
CSRF保護の重要性
CSRF攻撃は甚大な被害を及ぼす可能性があります。認証ユーザーに代わって認証されないアクションを実行されることがあります。カフェのシナリオでは、あなたが辛苦して得たお金を失うかもしれません!それがなぜCSRF保護が必要で、Laravelが私たちを守ってくれる理由です。
LaravelのCSRF保護実装
LaravelはアプリケーションをCSRF攻撃から守ることを非常に簡単にします。それどのように動作するかを探ってみましょう。
CSRFトークン
LaravelのCSRF保護の中心には、ユニークなトークンがあります。このトークンをアプリケーションとユーザーのブラウザ間の秘密の握手だと考えてください。
以下に、フォームにこのトークンを含める方法を示します:
<form method="POST" action="/profile">
@csrf
...
</form>
@csrf
ディレクティブは、CSRFトークンを含む非表示の入力フィールドを生成します。フォームに秘密のパスワードを与えるようなものです!
CSRF検証ミドルウェア
Laravelはミドルウェアを使用して、POST、PUT、PATCH、DELETEリクエストごとにCSRFトークンを検証します。クラブの入口でIDをチェックするセキュリティガードのようなものです。
ミドルウェアの背後での動作を以下に示します:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* CSRF検証を除外すべきURI。
*
* @var array
*/
protected $except = [
//
];
}
このミドルウェアはすべてのウェブルートに自動的に適用されます。アプリケーションを守る目に見えないシールドのようなものです!
CSRF保護を除外するURL
時々、特定のURLをCSRF保護から除外したい場合があります。例えば、他のアプリケーションが使用するAPIを構築している場合などです。これらのURLをVerifyCsrfToken
ミドルウェアの$except
配列に追加することで、除外できます:
protected $except = [
'api/*',
'webhook/*',
];
クラブの入口で特定のVIPがセキュリティチェックをスキップするパスを与えるようなものです。
X-CSRF-TOKEN
AJAXリクエストの場合、LaravelはCSRFトークンをX-CSRF-TOKEN
というカスタムHTTPヘッダーで送信することを許可します。以下に設定方法を示します:
<meta name="csrf-token" content="{{ csrf_token() }}">
そして、JavaScript(jQueryを使用しての例):
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
AJAXリクエストに「私は認証済みである」という特別なバッジを与えるようなものです!
X-XSRF-TOKEN
LaravelはXSRF-TOKEN
という名前のクッキーにCSRFトークンを設定します。Angularなどの多くのJavaScriptフレームワークは自動的にこのクッキーを使用します。
これらのフレームワークを使用していない場合は、手動でトークンを送信できます:
var token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
アプリケーションに秘密のデコーダリングリングを与えるようなものです!
CSRF保護方法
以下に、私たちが議論したCSRF保護方法をまとめた表を示します:
方法 | 説明 |
---|---|
@csrfディレクティブ | CSRFトークンを含む非表示の入力フィールドを生成 |
VerifyCsrfTokenミドルウェア | POST、PUT、PATCH、DELETEリクエストごとにCSRFトークンを自動的に検証 |
X-CSRF-TOKENヘッダー | AJAXリクエストにCSRFトークンをカスタムHTTPヘッダーで送信 |
XSRF-TOKENクッキー | CSRFトークンをクッキーに設定し、JavaScriptフレームワークが使用 |
結論
そして、未来のコード魔術師たち!私たちはLaravelにおけるCSRF保護の地を旅しました。アプリケーションのセキュリティは非常に重要であり、Laravelはそれを非常に簡単にします。
いつも私の学生たちに言いますが、CSRF保護をバーやクラブの入口でIDをチェックするボーイと考えてください。認証されたリクエストだけが通過し、悪巧みなパーティー crasherを守ります。
練習を続け、好奇心を持ち続け、すぐにプロのように安全なLaravelアプリケーションを構築するようになるでしょう!ハッピーコーディング!
Credits: Image by storyset