被阻止的主机:localhost ruby​​ on Rails 6.0.0

Ale*_*ejo 8 ruby ruby-on-rails nginx ruby-on-rails-6

我正在开发我的第一个 Rails 6 应用程序,但是当我尝试在 nginx 服务器后面的开发环境中提供它时,我发现了这条消息

被阻止的主机: localhost

我尝试添加错误中提到的配置,config/environments/development.rbconfig/application.rb它不起作用。

我使用的是rails 6.0.0,ruby 2.6.5,nginx 1.10.3

如果我访问http://localhost:3000(直接 puma URL),它就可以正常工作。但我想知道为什么我会收到此错误。

Nez*_*zir 3

添加主机授权是因为DNS rebinding attacks这里有更多详细信息,并且还链接到更详细的解释。

\n\n
\n

引入 ActionDispatch::HostAuthorization 主机授权是一种新的中间件,它DNS rebinding attacks通过显式允许向主机发送请求来进行防范。有关攻击本身的更多信息,请参阅此 Medium 帖子和Daniel Miessler\xe2\x80\x99s DNS 重新绑定攻击的解释。默认情况下,\xe2\x80\x99s 设置为所有\n Rails 6 应用程序,并允许开发以下主机\n IPAddr.new(\xe2\x80\x9c0.0.0.0/0\xe2\x80\x9d), IPAddr.new(\xe2\x80\x9c::/0\xe2\x80\x9d), \xe2\x80\x9clocalhost\xe2\x80\x9d] 它支持 \n RegExp、Proc、IPAddr 和 String 数组或配置中的单个字符串。这意味着在 Rails 6 中,我们需要在环境配置文件中显式设置域。更多信息可在 HostAuthorization 代码和 HostAuthorization 测试中获得。

\n
\n

  • 这里还有一个问题:https://github.com/thoughtbot/suspenders/issues/975 以及rails config.hosts实现:https://github.com/rails/rails/blob/528c5bb224a2f9ea6eee7b15ef5de5e9d17bf309/railties/lib/rails /application/default_middleware_stack.rb#L16 所以你可以多检查一下,也许你可以找到一些逻辑。 (2认同)