【laravel】TrustHostsが動かない!解決方法

製作 プログラム

最終更新日:2023/11/01

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

そもそも必要なのかわかりませんが、laravelでHTTPヘッダ改ざん対策をしようとするとTrustHostsというミドルウェアを使え、と公式ドキュメントに書かれてます。

参考:そもそもホストヘッダインジェクション攻撃って何?

で、公式ドキュメントに乗ってる通りに有効にしたんですが、なんか動かないんですよね。なぜかlaravelの中でもTrustHostsに関してはものすごい日本語の記事が少ないですし…。

てことでここではlaravelのTrustHostsミドルウェアが動かない時の解決方法を紹介します。

  1. 解決方法:shouldSpecifyTrustedHosts()を書く
  2. 理由:開発環境だと動かないようになってます
  3. おまけ
  4. まとめ

解決方法:shouldSpecifyTrustedHosts()を書く

TrustHosts.php


    protected function shouldSpecifyTrustedHosts()
    {
        return 1;
    }

TrustHosts.phpのhosts()関数の下にでも、上記をそのままコピペしてください。

これでTrustHostsミドルウェアが有効になり、hosts()の中身を消すなりして、信用できるホストをなくしたりすれば、ちゃんとlaravelが404ページを表示するようになります。

理由:開発環境だと動かないようになってます

TrustHostsミドルウェアが動かなかった原因なんですが、laravelのTrustHostsミドルウェアは開発環境だと動かないようになってます。

それをやってるのが「shouldSpecifyTrustedHosts()」という関数で「Illuminate\Http\Middleware\TrustHosts.php」に本体があります。やってることは開発環境かどうかをenvの情報を見て判断してるだけです。

なので、この「shouldSpecifyTrustedHosts()」をオーバーライドして毎回1を返すようにしてるのが上記でコピペしてもらったコード。もう開発環境とか判断せずに絶対TrustHostsやっちゃって!っていう風にしてます。

おまけ

公式ドキュメントになぜか載っていないのでおまけですが、「どのファイルでTrustHostsをアンコメントすればいいのよ!?」っていうのを。

これは「\app\Http\Kernel.php」です。この中でコメントアウトされてるTrustHostsをアンコメントすればOK。

まとめ

ここではlaravelのTrustHostsミドルウェアが動かない時の解決方法を紹介しました。

まとめると公式ドキュメントのやり方で有効にはなってるものの、開発環境では動かないようになってるため、開発環境でテストしたいなら「shouldSpecifyTrustedHosts()」をオーバーライドしてあげればOK!という感じ。

参考にしてみてくださいね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /