環境
Laravel Version 8.68.1
概要
Laravelでよく使うurlへルパ関数ですが意外な落とし穴を見つけました。
url('/hoge/hoge');
それは「データベースにURLを登録する際にurlへルパ関数を使うと最悪の場合サイトの信頼性を損ねる可能性がある」ということです。
どういうことか
下記の例を見てみましょう
HogeController.php
App\Models\HogeTable::create([
'title' => 'タイトル',
'text' => 'テキスト',
'link' => url('/hoge/1'),
]);
このサービスが仮に http://example.com というドメインでこのサービスを運営していたとします。
この場合linkカラムには http://example.com/hoge/1 という値が入ります。
しかし、逆引きされたIP http://93.184.216.34 でアクセスして、この処理が実行された場合、linkカラムには http://93.184.216.34/hoge/1 という値が登録されてしまいます。
つまり、悪意のあるユーザーがこのIPを任意のドメインのDNSレコードに紐づけてサービスにアクセスして、この処理を実行した場合、任意のURLを登録されてしまいます。
登録された悪意のあるURLに他のユーザーがアクセスしてしまった場合にサイトの信頼性を大きく損ねてしまうというわけです。
対策
- .envのAPP_URLからURLを取得するようにする
- Webサーバーを正しく設定する