Мы получили обратную связь из нашего отчета о пентестах, в которой говорилось, что мы должны отключить токены сервера. Это мешает людям видеть, какую версию PHP мы используем, и ограничивает их способность ориентироваться на конкретную версию PHP.
Я добавил в nginx.conf в блоке http следующее:
server_tokens off;
Но какие инструменты я могу использовать, чтобы проверить, повлияло ли это изменение?
Из руководство вы знаете, что делает настройка:
Синтаксис:
server_tokens on | off
;
По умолчанию:server_tokens on
;
Контекст: http, сервер, расположениеВключает или отключает вывод версии nginx в сообщениях об ошибках и в поле заголовка ответа «Сервер».
Итак, ваши варианты:
nginx/1.2.3
больше нет.Простая проверка заголовков ответа HTTP - это подключение вручную, то есть с помощью: telnet www.example.com 80
где клиентские строки - это то, что вы вводите:
клиент: HEAD / HTTP / 1.1
клиент: Хост: www.example.comсервер: HTTP / 1.1 200 ОК
сервер: Дата: среда, 1 января 1970 г., 22:13:05 GMT
сервер: Сервер: Nginx / 1.2.3
сервер: Подключение: закрыть
сервер: Content-Type: text / html
Немного погуглив, я обнаружил, что команда curl может проверять заголовки сервера, которые показывают как токены сервера, так и версии php:
curl -I -L www.example.com
Спасибо Алексею за указание на необходимые изменения в 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
Кроме того, если вы обслуживаете проекты PHP, вам может потребоваться изменить /etc/nginx/{fastcgi,fastcgi_params).conf
fastcgi_param SERVER_SOFTWARE nginx;
Взгляните на 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)