はじめに
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
を追加します。
Rails.application.configure do
...
config.hosts << '.ngrok.io'
end
再起動してから試す
rails server
と ngrok
を再起動して試すと、今度は普通にアクセスできるようになります。
Rails 5 では
Rails 5.2.3 ではブロックされることはありません。
試したソース
試したソースは以下にあります。
https://github.com/suketa/rails_sandbox/tree/try078_guard_dns_rebiding_attack