========================================== 109:不正なドメイン名でのアクセスを拒否する ========================================== .. maigo:: IPアドレス宛の無差別攻撃 * 後輩W:Djangoでエラーが起きて ``Invalid HTTP_HOST header: '91.92.66.124'. You may need to add '91.92.66.124' to ALLOWED_HOSTS.`` というタイトルのメールがたくさん届くんですけど、どうしたらいいんでしょう? * 先輩T:なるほど、botがIPアドレス直でアクセスしに来てるんだね。どうすれば良いと思う? * 後輩W:調べてみます……そのIPアドレスにブラウザでアクセスすると403エラーになってエラーが再現するので、アクセスできるように ``settings.py`` の ``ALLOWED_HOSTS`` に **91.92.66.124** を加えればよさそうです。 * 先輩T:それはちょっと安直だね。Djangoの公式ドキュメントには ``ALLOWED_HOSTS`` の目的が詳しく書いてあるよ [#allowedhosts]_ 。 * 後輩W:読みます……なるほど、 ``ALLOWED_HOSTS`` は攻撃を防ぐためにあるから、アクセス許可するのは悪手ってことですね。エラーメール通知を完全にオフにするのは良くなさそうだし、今はエラーメールが多いと言っても日に10通程度なのでこのままにしておくのが良さそうです。 * 先輩T:それだと対応が必要なエラー通知が埋もれちゃうだろうね。それに不要なアクセスがDjangoまで届いているのも良くないよ。 エラーメッセージには、多くの場合エラーの直接の原因が書かれています。 しかし、この ``ALLOWED_HOSTS`` のケースでは指示通りに対処すると、かえって問題を深刻にしていまいます。 .. [#allowedhosts] https://docs.djangoproject.com/ja/2.2/ref/settings/#allowed-hosts 具体的な失敗 ===================== .. index:: ALLOWED_HOSTS インターネット上では、ウイルスやbotなどによってすべてのIPアドレスに対して無差別に攻撃が行われています。 ``ALLOWED_HOSTS`` はそのような攻撃を防ぐことが目的の設定なため、エラーメッセージで ``You may need to add '91.92.66.124'`` と言われたからといって安直に追加してはいけません。 また、こういった攻撃の中には、IPアドレスではなく本来とは異なるドメイン名でアクセスすることでプログラムの脆弱性を突いて侵入しようとするケースもあります。 発生件数が少ないからといってエラーを放置してしまうとDjangoアプリが攻撃に晒され、たとえ攻撃が無効だとしてもDjangoでのリクエスト処理でサーバーリソースが占有されてしまいます。 .. omission:: 関連 ========= * :doc:`107-リバースプロキシ` * :doc:`../実装の進め方/33-公式ドキュメントを読もう` .. メモ:ネタ元 https://beproud.slack.com/archives/G02D3AFNF/p1528101806000284