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


11

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

我在http块下将以下内容添加到nginx.conf中:

server_tokens off;

但是我可以使用哪些工具来检查此更改是否生效?


1
server_token与PHP版本无关。通常在单独的header中发送X-Powered-By。我想您需要php.net/manual/en/ini.core.php#ini.expose-php
Alexey

很好,Alexey,服务器令牌只是我解决方案的一部分。我确实需要添加进一步的设置以停止公开PHP版本。谢谢!
fyberoptik

Answers:


14

通过手册,您可以了解设置的作用:

语法server_tokens on | off;
默认值server_tokens on;
上下文:http,服务器,位置

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

因此,您的选择是:

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

查看HTTP响应标头的简单检查是手动连接,即与: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


1
感谢您的回答HBruijn,仅在Windows 7 telnet上尝试失败。curl -I example.com取得了一些成功,但这没有显示任何PHP信息。
fyberoptik

尽管这通常与页面中的标头不同,但这不会影响PHP……
Thomas Ward 2015年

4

经过更多的谷歌搜索后,我发现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


0

看一下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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.