Closed5
オープンリダイレクトについて
オープンリダイレクト(Open Redirect)攻撃は、リダイレクト処理の実装不備を悪用し、被害者となるユーザを意図しない URL に誘導をする攻撃手法・脆弱性です。
意図しないリダイレクトを発生させるだけですと、大きな問題は起こせないと思われるかもしれませんが、正規ドメインから悪性ドメインへ意図しない誘導を行える場合、フィッシング詐欺などに悪用される可能性があります。
public function confirmLogin(Request $request) {
...
if ($email == 'bob' && $password == '1234') {
...
// Append the domain name so it always redirects internally
$redirectUrl = 'https://mybank.com/' . $request->session()->get('redirect', '/');
if (filter_var($redirectUrl, FILTER_VALIDATE_URL) === FALSE) {
return redirect('/'); // By, default redirect to landing page if the URL is bad
}
return redirect($redirectUrl);
} else {
...
}
URLが多数ある場合、またはURLに動的コンポーネントがある場合は、このアプローチを使用できます。このアプローチでは、現在のホスト名内にリダイレクトするようにコードを制限します。
URLが動的で、ホワイトリスト形式の制御ができない場合の確認事項
-
sample.com
に対して、sample.com.hoge
やsample.commmmm.hoge
に対応できているか。 - httpsやhttpのみ受け入れる
- httpsなどがなくても有効なURLである
Laravelにおいて
Request::getSchemeAndHttpHost()
から「スキーマ(httpsなど)://現在のホスト」を取得できる。
Request::getSchemeAndHttpHost()
と/
と指定されたパスを結合すれば、内部リンクになる。
このスクラップは2022/04/27にクローズされました