Laravel13のリクエスト強化対策 アップデート Sec-Fetch-Site の導入で何が変わるのか

-- Views

April 18, 26

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Laravel13のリクエスト強化対策 アップデート Sec-Fetch-Site の導入で何が変わるのか 1

2.

今日の話 Laravel13のアップデートで Sec-Fetch-Site 検証が追加されたことによる影響調査 2

3.

自己紹介 発表者 ma@me 所属 業務 不具合分析 不具合対応 品質改善業務をメインに色々や ってます 登壇予定 フロントエンド・PHPカンファ レンス北海道2026 3

4.

今回の公式が掲げるアップデートのテーマ 最小限の破壊的変更 Minimal Breaking Changes Much of our focus during this release cycle has been minimizing breaking changes. Instead, we have dedicated ourselves to shipping continuous quality-of-life improvements throughout the year that do not break existing applications. https://laravel.com/docs/13.x/releases#minimal-breaking-changes 4

5.

Request Forgery Protection (クロスサイトリクエストフォージェリ対策) LaravelのCSRFミドルウェアに Sec-Fetch-Site ヘッダーを使用したリクエストオリジン検証機能を追加 Laravel's CSRF middleware has been renamed from VerifyCsrfToken to PreventRequestForgery, and now includes request-origin verification using the Sec-Fetch-Site header. VerifyCsrfToken and ValidateCsrfToken remain as deprecated aliases, but direct references should be updated to PreventRequestForgery, especially when excluding middleware in tests or route definitions: https://laravel.com/docs/13.x/releases#request-forgery-protection 5

6.

CSRF検証にSec-Fetch-Siteが加わるが 最小限の破壊的変更とは? 懸念点 1. 外部サイト連携とか大丈夫? 2. Postman とか大丈夫? 3. テスト用に認証飛ばすコードは大丈夫? 🤔 6

7.

🔍 Sec-Fetch-Site 検証 どこまで影響があるのか 調べてみた 7

8.

Sec-Fetch-Site とは ブラウザが自動付与するリクエストヘッダー リクエストの発信元をサーバーに伝える 8

9.

Sec-Fetch-SiteのValue一覧 Sec-Fetch-Site: 値(この部分) 値 意味 代表例 same-origin 同一オリジンからのリクエスト fetch(JSON), CSS, image same-site 同一サイト(サブドメイン含む) サブドメイン間のAPI呼び出し cross-site 外部サイトからのリクエスト 外部CDNのCSS/JS, 外部埋め込み none ユーザーの直接操作(URLバー等) URLバー入力, ブックマーク 9

10.

CSRFトークンとSec-Fetch-Site 比較 CSRFトークン Sec-Fetch-Site 導入時期 いい意味でレガシーな標準的対策 ブラウザ標準機能。新しい。 仕組み サーバーがトークンを発行・検証 ブラウザが自動でヘッダーを付与 目的 クロスサイトの偽造リクエスト防止 リクエスト元の信頼性判定 実装コスト フォームにトークン埋め込みが必要 サーバー側でヘッダーを確認するだけ 10

11.

・CSRFトークンでやっていることが ブラウザ標準でもできる 🤔 ・Sec-Fetch-Site を使って CSRFトークン廃止? 11

12.

今回のLaravelのアップデートは ✅ Sec-Fetch-Site か CSRFトークン による検証 ❌ CSRFトークン検証の廃止 12

13.

✅ こっち if ( secFetchSiteCheck() === OK || csrfTokenCheck() === OK ) { // 許可 } どちらか通ればOK。CSRFトークンの検証も引き続き行う 検証優先:Sec-Fetch-Site > CSRFトークン 13

14.

❌ こうではない 両方とも通らないとNG if ( secFetchSiteCheck() === OK && csrfTokenCheck() === OK ) { // 許可 } Sec-Fetch-Siteヘッダーのみでの検証 if (secFetchSiteCheck() === OK) { // 許可 } 14

15.

懸念点 解決 1. 外部サイト連携とか大丈夫? 2. Postman とか大丈夫? 引き続き CSRFトークンを持っていればOK 15

16.

これだけ注意 3. テスト用に認証飛ばすコードは差し替える必要あり が 非推奨に。 PreventRequestForgery を使う必要がある VerifyCsrfToken <?php use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; // Laravel <= 12.x -> withoutMiddleware([VerifyCsrfToken::class]); // Laravel >= 13.x -> withoutMiddleware([PreventRequestForgery::class]); 16

17.

まとめ Laravel が Sec-Fetch-Site によるリクエスト検証を追加 CSRFトークンとの OR 条件 で動作 既存のコード・テスト・ツールへの影響は最小限 確かに 最小限の破壊的変更 だった 17