Posted at

Rails6 のちょい足しな新機能を試す78(Guard DNS rebiding attacks編)


はじめに

Rails 6 に追加された新機能を試す第77段。 今回は、 Guard DNS rebiding attacks 編です。

Rails 6 では、 Rails.application.config.hosts= でアクセスを許可するサーバーを指定できるようになりました。

development 環境では、すべてのIPアドレス表記(0.0.0.0/0(IPv4) ::/0(IPv6)) のサーバーと localhost のみがデフォルトで許可されています。

それ以外の環境では、デフォルトでは制限がありません。

Ruby 2.6.3, Rails 6.0.0, Rails 5.2.3 で確認しました。

$ rails --version

Rails 6.0.0

今回は、 ngrok を使ってこの確認をしてみましょう。


プロジェクトを作る

$ bin/rails new rails_sandbox

$ cd rails_sandbox


rails server を起動する

$ bin/rails s


ngrok を起動する

$ ngrok http 3000


ngrok で表示された URL でアクセスする

https://xxxxxxxx.ngrok.io にアクセスしてみます。

ブラウザには、以下のようにブロックされたことが表示されます。


blocked host: xxxxxxxx.ngrok.io

To allow requests to xxxxxxxx.ngrok.io, add the following to your environment configuration:

config.hosts << "xxxxxxxx.ngrok.io"



config/environments/development.rb を編集する

ngrok を使ったアクセスを許可するように設定を変更します。

ngrok のサーバーは,起動するたびに毎回変わりますので、どれでも許可できるように .ngrok.io を追加します。


config/environments/development.rb

Rails.application.configure do

...
config.hosts << '.ngrok.io'
end


再起動してから試す

rails serverngrok を再起動して試すと、今度は普通にアクセスできるようになります。


Rails 5 では

Rails 5.2.3 ではブロックされることはありません。


試したソース

試したソースは以下にあります。

https://github.com/suketa/rails_sandbox/tree/try078_guard_dns_rebiding_attack


参考情報