Как проверить, что токены сервера отключены?

11

Мы получили ответ из нашего отчета о тестировании, в котором говорилось, что мы должны отключить токены сервера. Это позволит людям не видеть, какую версию PHP мы используем, и ограничить их способность ориентироваться на конкретную версию PHP.

Я добавил следующее в nginx.conf под блоком http:

server_tokens off;

Но какие инструменты я могу использовать, чтобы проверить, что это изменение вступило в силу?

fyberoptik
источник
1
server_tokenне имеет ничего общего с версией PHP. Обычно отправляется в отдельном заголовке X-Powered-By. Полагаю, вам нужен php.net/manual/en/ini.core.php#ini.expose-php
Алексей Тен
Хороший улов Алексей, серверные токены являются лишь частью моего решения. Мне нужно добавить дополнительные настройки, чтобы остановить раскрытие версии PHP. Спасибо!
фибероптик

Ответы:

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
сервер: дата: ср, 1 января 1970 22:13:05 GMT
сервер: сервер: Nginx / 1.2.3
сервер: соединение: закрыть
сервер: тип контента: text / html

HBruijn
источник
1
Спасибо за ваш ответ HBruijn, только что попробовал с Windows 7 Telnet, безуспешно. Был немного больше успеха с curl -I example.com, но это не показывает никакой информации PHP.
фибероптик
Это не повлияет на PHP, так как это обычно другой заголовок на страницах ...
Томас Уорд
4

Немного погуглив, я обнаружил, что команда 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
fyberoptik
источник
1

Кроме того, если вы обслуживаете проекты PHP, вам может потребоваться изменить /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
Александр Бр.
источник
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)
james.garriss
источник