どのプロキシから来た X-Forwarded-* を信じるかを決める設定(bootstrap/app.php)。
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(at: ['10.0.0.0/8']); // この IP から来たときだけ信じる
$middleware->trustHosts(at: ['^example\.com$']); // 想定外の Host は拒否
})
普段の流れ: ブラウザ → LB → アプリ。LB が「元の Host は example.com」と
X-Forwarded-Hostに書いて渡し、アプリはそれを見て URL を組み立てるat: '*'は「誰が書いたX-Forwarded-*でも信じる」設定。LB を通らずアプリに直接届く経路があると、攻撃者が自分で書いたヘッダーもそのまま信じてしまうcurl http://<アプリの IP>/forgot-password -H 'X-Forwarded-Host: evil.com' -d 'email=victim@example.com'→ アプリは自分を evil.com だと思い込み、パスワードリセットのメールに
https://evil.com/reset/<トークン>を載せる。メールは被害者のアドレスに本物のサービスから届く(攻撃者が変えられるのはリンクのドメインだけ)。リセットのフォームはログイン不要でメールアドレスを入れるだけなので、攻撃者が被害者のアドレスを入れれば、アプリはそのアカウント宛てに送る。被害者がそのリンクを踏むと、トークン付きの URL が evil.com に届き、攻撃者はそのトークンを本物の example.com で使ってパスワードを書き換えるtrustHostsは「自分のホスト名はこれだけ」と許可リストを持たせる設定。Host が evil.com のリクエストはその時点で拒否するので、偽装されても URL は作られない