既存の Web アプリの Rails バージョンを 6 に上げたところ、以下のような Blocked host: というエラーが出るようになった。
Blocked host: lvh.me
To allow requests to lvh.me, add the following to your environment configuration:
config.hosts << "lvh.me"
Rails 6 からは DNS Rebuilding 攻撃を防ぐためにホスト名をホワイトリストに登録しなければならないらしい。エラーメッセージにあるように config.hosts にホスト名を指定すれば良い。
# config/environments/development.rb
Rails.application.configure do
# 省略
config.hosts << 'lvh.me
# . を付けるとサブドメイン全て利用可能になる
config.hosts << '.lvh.me'
# 正規表現も利用可能
config.hosts << /[a-z0-9]*\.lvh\.me/
end
config.hosts にはこのように正規表現を利用したり、複数指定することができる。
もしくは以下のように hosts.clear を指定すると全てのホスト名でアクセス可能になる。
# config/environments/development.rb
Rails.application.configure do
# 省略
config.hosts.clear
end
ドメイン名を設定ファイルとかに書いてたらこんな感じで読み込んでやると良いかも。
domain = Settings.domain.gsub(':3000','')
config.hosts << domain
config.hosts << ".#{domain}"
Rails 6 使うなら覚えておくと良さそう。
Guard against DNS rebinding attacks by permitting hosts by gsamokovarov · Pull Request #33145 · rails/rails · GitHub