観察 コマ25

リダイレクト先チェッカー

「ログイン後に元のページへ戻す」ために、戻り先の URL をパラメータで受け取る。 そのときの戻り先の検証を、よくある書き方で比べる。このページは判定するだけで、実際には移動しない。

試す URL: 正規(相対パス) 正規(絶対URL) 外部サイト // で始まる /\ で始まる @ の前に lab を置く パスに lab を含める javascript: スキーム

判定する URL: //trap.y-omasa.work/phish/
ブラウザが実際に向かう先: (計算中) (正規サイトは lab.y-omasa.work)

検証のしかたコード判定結果
前方一致str_starts_with($url, 'https://lab.y-omasa.work') 弾く
部分一致str_contains($url, 'lab.y-omasa.work') 弾く
先頭が / なら相対パスとみなすstr_starts_with($url, '/') 通す
先頭が / で、2文字目が / でないpreg_match('#^/[^/]#', $url) 弾く
parse_url でスキームとホストを比べるscheme が http/https かつ host が lab.y-omasa.work 弾く
相対パスだけ許可(厳密)preg_match('#^/(?![/\\\\])#', $url) 弾く
番号で管理する?to=1 → サーバー側の対応表で URL に変換 —URL を受け取らないので、この種の攻撃は成立しない

読み取ること

あなたの座席ID: 6a36e897594c この演習をリセット 演習一覧へ