Laravel - CSRF保護

こんにちは、若手開発者さんたち!今日は、LaravelにおけるCSRF保護の世界に飛び込みます。プログラミングが新しい方也不用担心;私はあなたを一歩一歩ガイドします。これまでに多くの学生を指導してきた経験を活かしてです。一緒にこのエキサイティングな旅に出発しましょう!

Laravel - CSRF Protection

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