我们从渗透测试报告中收到反馈,称我们应该关闭服务器令牌。这样人们就无法看到我们正在使用的 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,这是一个允许您“将您的合规性、安全性和其他政策要求转变为自动化测试”的工具。
它可以对 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)