結論
下記のいずれかでエラーを回避できます。
※ひとまずエラーを回避するための方法として記載しておりますが、これがベストな対処法かは判断し兼ねます。対応は自己責任でお願いいたします。
エラー回避策①
config/environments/development.rb
に下記を記載し、ホワイトリストに許可したいhostを追加する。
Rails.application.configure do
(中略)
config.hosts << "<許可したいホスト名>"
(中略)
end
後述するエラーメッセージにしたがった方法です。
今回の私の場合、config.hosts << "thawing-caverns-37676.herokuapp.com"
を記載しました。
エラー回避策②
同じくconfig/environments/development.rb
に下記を記載し、ホワイトリスト全体をクリアする。
これにより、すべてのホスト名に対するリクエストを通過させることができる。
Rails.application.configure do
(中略)
config.hosts.clear
(中略)
end
ただし、せっかくRails6で追加された保護機能を無効化してしまうため、推奨は①のような気がします。
発生したエラー
Rails6で開発した環境をherokuへプッシュしてアクセスしようとしたところ、下記のようなエラーが発生した。
Blocked host: thawing-caverns-37676.herokuapp.com
To allow requests to thawing-caverns-37676.herokuapp.com, add the following to your environment configuration:
config.hosts << "thawing-caverns-37676.herokuapp.com"
※thawing-caverns-37676.herokuapp.comはherokuのアプリ名
原因
調べてみると、Rails6へのアップデート時の変更点の一つである
DNSリバインディング攻撃からの保護
という機能が原因のようです(Railsガイド〜Ruby on Rails 6.0 リリースノート〜参照)。
上記機能のPull Requestによると、攻撃を保護するためのActionDispatch::HostAuthorization
という新しいミドルウェアが導入されたことにより、許可するホストは自分で設定しなくてはならなくなったようです。
(デフォルトでは0.0.0.0、::、およびlocalhostからのリクエストを許可)
まとめ
対処法として、config/environments/development.rb
に下記のいずれかを記載する。
対処法① ホワイトリストに許可したいhostを追加
config.hosts << "<許可したいホスト名>"
対処法② ホワイトリスト全体をクリア
`config.hosts.clear`
参考