リダイレクト先URLはサーバ検証済みでも最終実行側で独立にallowlistする(多層防御)
フロントエンド
セキュリティ
認証・認可
判断
原則
サーバが返すリダイレクト先 URL(OAuth 復帰先など)をクライアントがそのまま遷移に使うときの open redirect 対策。
原則: サーバ側で redirect 先を検証済み(例: 許可 pathname と同一 host に絞っている)でも、フロントが最終的に window.location へ渡す実行者なので、フロント側でも独立に allowlist する。検証を一方に任せず両方でかける defense-in-depth。
実装: フロント側は受け取った URL を再構築・上書きせず、同一 origin(自サービスの base URL)かつ pathname が許可パス(例: /oauth/authorize)の URL だけ許可し、それ以外は安全な fallback(例: dashboard)へ遷移する。サーバ検証済みの URL をフロントで勝手にクエリを付け直す・再構築しない(そのまま遷移に使う)と不整合を避けられる。
検証: テストに悪性 URL(別 origin の evil.example など)のケースを追加し、fallback に落ちることを確認する。境界をまたぐ値は「最後に実際に作用させる層」でも検証する、という一般則の一例。