HTTP_HOST
Django などで settings.ALLOWED_HOSTS 設定でブラウザでアクセスするドメイン名を制限しているのはなぜか?制限しないとどんなリスクがあるのか。
ALLOWED_HOSTS
Django サイトを配信できるホスト/ドメイン名を表す文字列のリストです。これはセキュリティ対策の手段の1つで、一見安全な設定の Web サーバでも晒される可能性が高い、 HTTP Host header 攻撃 を防ぐことができます。
Host ヘッダーの検証
Djangoはいくつかのケースで、URLを組み立てるためにクライアントから送られてきた Host ヘッダーを使用します。 Host ヘッダーの値は、クロス・サイト・スクリプティング (XSS) 攻撃を回避するためにサニタイズされますが、それでもまだニセの Host 値はクロス・サイト・リクエスト・フォージェリ (CSRF) やキャッシュポイズニング攻撃、Eメールアドレス内のリンクへのポイズニング等に使用されます。
以前のドキュメントでは、外部から渡される Host ヘッダーを検証して正しい値にするようにウェブサーバーを設定することを推奨していました。これはまだ推奨されますが、多くの一般的なウェブサーバーは Host ヘッダーを正しく検証するように設定できません。例えば、Apacheがそのように設定されたとしても、あなたのDjangoサイトが ServerName に設定された非デフォルトの仮想ホストを扱うようにApacheに設定された場合、その仮想ホスト名に一致するような偽の Host ヘッダーを与えたHTTPリクエストを作れます。したがって、ウェブサーバー設定にたよるだけでなく、Djangoの ALLOWED_HOSTS に明示的に設定する必要があります。
理解するために英語だった上記を翻訳した