我如何检查服务器令牌是否已关闭?

我如何检查服务器令牌是否已关闭?

我们从渗透测试报告中收到反馈,称我们应该关闭服务器令牌。这样人们就无法看到我们正在使用的 PHP 版本,并限制他们针对特定 PHP 版本的能力。

我已将以下内容添加到 nginx.conf 的 http 块下:

server_tokens off;

但是我可以使用什么工具来检查此更改是否已生效?

答案1

来自手动的您知道该设置的作用是什么:

句法server_tokens on | off
默认server_tokens on
语境:http,服务器,位置

启用或禁用在错误消息和“服务器”响应标头字段中发出 nginx 版本。

因此你的选择是:

  • 生成一条错误消息,例如,如果您没有自定义的 404 错误消息,只需请求一个不存在的页面,并且在页脚中您将不再看到版本信息nginx/1.2.3
  • 检查服务器标头并确认不再显示版本。

一个简单的检查来查看 HTTP 响应标头的方法是手动连接 ie:telnet www.example.com 80 其中客户端行是您输入的内容:

客户端:HEAD / HTTP/1.1
客户端:主机:www.example.com

服务器:HTTP/1.1 200 OK
服务器:日期:1970 年 1 月 1 日,星期三 22:13:05 GMT
服务器:服务器:Nginx/1.2.3
服务器:连接:关闭
服务器:内容类型:text/html

答案2

经过进一步的 Google 搜索后,我发现 curl 命令可以检查服务器标头,其中显示服务器令牌和 php 版本:

curl -I -L www.example.com

感谢 Alexey 指出 PHP 需要进行的更改。

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 04 Jun 2015 10:49:35 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.example.com

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 04 Jun 2015 10:49:36 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Thu, 04 Jun 2015 10:49:35 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1433414975"
Content-Language: en

答案3

另外,如果你提供 PHP 项目,你可能需要更改/etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;

答案4

看一下 InSpec,这是一个允许您“将您的合规性、安全性和其他政策要求转变为自动化测试”的工具。

https://www.inspec.io

它可以对 Nginx 服务器进行所有配置测试。以下是测试 conf 文件是否存在以及 的值的一种方法server_tokens

conf_path = '/etc/nginx/nginx.conf'

control 'Server tokens should be off' do
  describe file(conf_path) do
    it 'The config file should exist and be a file.' do
      expect(subject).to(exist)
      expect(subject).to(be_file)
    end
  end
  if (File.exist?(conf_path))
    Array(nginx_conf(conf_path).params['http']).each do |http|
      describe "http:" do
        it 'server_tokens should be off if found in the http context.' do
          Array(http["server_tokens"]).each do |tokens|
            expect(tokens).to(cmp 'off')
          end
        end
      end
    end
  end
end

如果设置正确,InSpec 将返回:

  ✔  Server tokens should be off: File /etc/nginx/nginx.conf
     ✔  File /etc/nginx/nginx.conf The config file should exist and be a file.
     ✔  http: server_tokens should be off if found in the http context.

如果不:

  ×  Server tokens should be off: File /etc/nginx/nginx.conf (1 failed)
     ✔  File /etc/nginx/nginx.conf The config file should exist and be a file.
     ×  http: server_tokens should be off if found in the http context.

     expected: "off"
          got: ["on"]

     (compared using `cmp` matcher)

相关内容