如何从Nginx/Passenger中删除“X-Runtime”头?

8

编辑 -- 我下面发布的解决方案可能适用于任何服务器(Nginx / Apache / 任何其他服务器),因为这个头文件是在Rails本身中设置的。


有人知道在Nginx和Passenger中如何删除“X-Runtime”头文件吗?

我已经在源文件中使用了grep,但还没有找到任何东西,但由于它是Rails的一个明显标志,我想要摆脱它以保护安全。


我非常确定nginx没有设置X-Runtime。我建议您检查Passenger源代码。 - Jauder Ho
在提问之前,我已经对这两个源文件进行了grep搜索,但是没有发现任何相关的内容。 - user65663
5个回答

10

对于仍然遇到问题的人,我认为最简单和最正确的方法是在config/application.rb中添加以下内容:

config.middleware.delete(Rack::Runtime)

所有其他方法似乎不是禁用标题,而是从输出中过滤标题。这适用于rails4,不确定是否适用于其他版本。

更新:

在初始化文件中添加以下代码可能更加健壮,因为一些其它组件可能会默认存在Rack::Runtime中间件。

Rails.application.config.middleware.delete(Rack::Runtime)

这在Rails 4.1.5中给了我这个错误:Exiting /Users/ryan/.rvm/gems/ruby-2.1.2@wpvulndb/gems/actionpack-4.1.5/lib/action_dispatch/middleware/stack.rb:125:in `assert_index': No such middleware to insert before: "Rack::Runtime" (RuntimeError) - ethicalhack3r
也许有一些代码试图在Rack :: Runtime之前插入某些内容,并假设它在中间件列表中。您可以尝试在初始化文件中使用以下代码,这应该可以避开这个问题:Rails.application.config.middleware.delete(Rack::Runtime) - petercai

7

结果发现它既没有在Nginx中设置,也没有在Passenger中设置。

它位于/bundle/actionpack-2.3.2/lib/action_controller/benchmarking.rb中的第90行。


4
我知道这是一个有点老的问题,但因为问题仍然存在,许多网站仍然暴露它们的乘客和Nginx版本,所以我提供了一个对我非常有效的答案。同样的解决方案也适用于X-Runtime标头。
只需安装第三方ngx_headers_more:http://github.com/agentzh/headers-more-nginx-module(您必须从源代码重新构建它)。将以下内容添加到您的配置文件中(我为此创建了/etc/nginx/conf.d/security.conf):
server_tokens off; more_clear_headers 'Server' 'X-Powered-By' 'X-Runtime';

2
在Apache中,您可以使用mod_headers来删除响应(或请求)中的任何标头。
要删除标头,您需要启用该模块:
# a2enmod headers

然后您可以使用Header指令的unset选项将它们取消设置:
Header unset X-Runtime
Header unset X-Powered-By

这个指令可以在全局级别和单个虚拟服务器级别使用。

1
以下内容适用于Apache。我没有正确阅读问题。 :)
启用头部模块mod_headers,并将以下内容添加到Apache的配置中。
Header always unset "X-Runtime"

您可能还想要删除X-Powered-By头部,因此也需要添加以下内容。

Header always unset "X-Powered-By"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接