カテゴリ: Laravel 更新日: 2025/12/02

LaravelのCSRFトークンとは?フォームのセキュリティ対策

LaravelのCSRFトークンとは?フォームのセキュリティ対策
LaravelのCSRFトークンとは?フォームのセキュリティ対策

先生と生徒の会話形式で理解しよう

生徒

「先生、Laravelでフォームを作るときによく@csrfって書きますけど、これは何ですか?」

先生

「これはCSRFトークンと呼ばれるもので、フォームを安全に送信するための仕組みです。」

生徒

「CSRFってなんですか?」

先生

「CSRFはクロスサイトリクエストフォージェリの略で、悪意のある第三者があなたのサイトに不正なリクエストを送る攻撃のことです。例えば、ログインした状態のサイトで勝手に操作されてしまうリスクがあります。」

生徒

「なるほど、安全にフォームを送るための仕組みなんですね。」

1. CSRFトークンの基本

1. CSRFトークンの基本
1. CSRFトークンの基本

Laravelでは、フォームに@csrfを追加すると、自動的にランダムなトークンが生成され、フォームと一緒に送信されます。サーバー側でこのトークンを確認することで、正しいユーザーからのリクエストかどうかを判断します。これにより、CSRF攻撃を防ぐことができます。

2. Bladeでのフォーム作成とCSRFトークン

2. Bladeでのフォーム作成とCSRFトークン
2. Bladeでのフォーム作成とCSRFトークン

フォームを作る際には、resources/viewsにBladeテンプレートを作ります。例えばお問い合わせフォームの場合:


<form action="/contact" method="POST">
    @csrf
    <div>
        <label for="name">名前:</label>
        <input type="text" id="name" name="name">
    </div>
    <div>
        <label for="email">メールアドレス:</label>
        <input type="email" id="email" name="email">
    </div>
    <button type="submit">送信</button>
</form>

ここで@csrfを入れることで、フォームに隠しフィールドとしてCSRFトークンが含まれ、送信時にサーバー側で自動チェックされます。

3. CSRFトークンの仕組み

3. CSRFトークンの仕組み
3. CSRFトークンの仕組み

CSRFトークンはランダムな文字列で、ユーザーのセッションと紐付けられています。フォーム送信時にサーバーがこのトークンとセッション内の値を照合し、一致すれば正しいリクエストとして処理します。これにより、第三者が不正にフォームを送信しても弾かれる仕組みです。

4. CSRFトークンを手動で確認する方法

4. CSRFトークンを手動で確認する方法
4. CSRFトークンを手動で確認する方法

通常は@csrfで自動的にチェックされますが、APIやAjaxリクエストでトークンを手動で扱うこともあります。metaタグにトークンを埋め込み、JavaScriptで取得してリクエストヘッダーに追加する方法です。


<meta name="csrf-token" content="{{ csrf_token() }}">

<script>
    const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
    fetch('/contact', {
        method: 'POST',
        headers: {
            'X-CSRF-TOKEN': token,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({ name: '太郎', email: 'taro@example.com' })
    });
</script>

5. CSRF対策のポイント

5. CSRF対策のポイント
5. CSRF対策のポイント
  • すべてのフォームに@csrfを必ず追加する
  • AjaxやJavaScriptで送信する場合は、ヘッダーにCSRFトークンをセットする
  • トークンはユーザーごとにランダムで生成されるため、使い回さない
  • POST以外のPUT、PATCH、DELETEリクエストでも@csrfが必要

これらを守ることで、Laravelのフォームを安全に運用でき、ユーザーの情報を守ることができます。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド