Назад | Перейти на главную страницу

Имеет ли смысл с точки зрения безопасности удалять HTTP-заголовок сервера?

Я использую Varnish и не совсем уверен, следует ли мне также удалить Server: nginx Заголовок HTTP. Зачем кому-то нужно знать, что я использую NGINX? Можно ли удалить этот HTTP-заголовок из ответа или он где-то нужен? С точки зрения безопасности, наверное, лучше так сделать?

RFC 7231 говорит о заголовок сервера:

Исходный сервер МОЖЕТ генерировать поле Server в своих ответах.

МАЙ интерпретируется как в RFC 2119:

  1. МОЖЕТ Это слово или прилагательное «ДОПОЛНИТЕЛЬНО» означает, что элемент действительно не обязателен. Один поставщик может выбрать включение элемента, потому что этого требует конкретная торговая площадка или потому, что поставщик считает, что он улучшает продукт, в то время как другой поставщик может опустить тот же элемент. Реализация, которая не включает конкретную опцию, ДОЛЖНА быть готова к взаимодействию с другой реализацией, которая включает эту опцию, хотя, возможно, с ограниченной функциональностью. Точно так же реализация, которая включает конкретную опцию, ДОЛЖНА быть подготовлена ​​к взаимодействию с другой реализацией, которая не включает эту опцию (за исключением, конечно, функции, предоставляемой опцией).

Поэтому вполне нормально ограничить или удалить заголовок ответа сервера. Конечно, неплохо знать, от чего вы можете отказаться, сделав это. Для этого вернитесь к RFC 7231:

Поле заголовка «Сервер» содержит информацию о программном обеспечении, используемом исходным сервером для обработки запроса, которая часто используется клиентами для определения объема сообщаемых проблем совместимости, для обхода или адаптации запросов, чтобы избежать определенных ограничений сервера, и для аналитики использования сервера или операционной системы. Исходный сервер МОЖЕТ генерировать поле Server в своих ответах.

Server = product *( RWS ( product / comment ) )

Значение поля Server состоит из одного или нескольких идентификаторов продукта, за каждым из которых следует ноль или более комментариев (раздел 3.2 [RFC7230]), которые вместе идентифицируют программное обеспечение исходного сервера и его важные субпродукты. По соглашению идентификаторы продуктов перечислены в порядке убывания их значимости для идентификации программного обеспечения исходного сервера. Каждый идентификатор продукта состоит из названия и необязательной версии, как определено в разделе 5.5.3.

Пример:

Server: CERN/3.0 libwww/2.17

Исходному серверу НЕ СЛЕДУЕТ генерировать поле Server, содержащее излишне мелкие детали, и СЛЕДУЕТ ограничивать добавление субпродуктов третьими сторонами. Слишком длинные и подробные значения полей Server увеличивают задержку ответа и потенциально раскрывают детали внутренней реализации, которые могут (немного) облегчить злоумышленникам поиск и использование известных дыр в безопасности.


Хотя на практике злоумышленники не проверяют заголовок Server :. Они просто пробуют все известные им эксплойты безопасности, независимо от того, показывает ли ваш сервер уязвимость или нет. Удаление сервера: заголовок - это безопасность неизвестностью действие, и почти полностью неэффективное. Но если вам от этого становится легче или вам велит сделать это начальник или одитор, дерзайте. Только не ожидайте, что это приведет к значительному улучшению вашего состояния безопасности.

Например, nmap может идентифицировать веб-сервер с довольно хорошей точностью, даже если он настроен так, чтобы не отправлять Server заголовок вообще, или когда содержимое заголовка полностью поддельное. Попробуйте сами с nmap -sV -P0 -p 80,443 <IP address>.

В Server Заголовок HTTP служит только одной цели - идентификации. Он нигде не требуется для правильной работы вашего сайта, и при его удалении ничего не сломается.

Он раскрывает внутреннюю инфраструктуру сервера и, таким образом, дает утечку информации о безопасности, которая может быть полезна для потенциального вторжения.

После ознакомления с программным обеспечением вашего веб-сервера через Server HTTP-заголовок, потенциальный злоумышленник может искать публично известные уязвимости вашего веб-сервера. Затем они могут использовать эту информацию в сочетании с любой другой информацией, которую они могут получить (например, путем сканирования), чтобы построить правильный вектор атаки.

Таким образом, вы можете удалить Server заголовок altogther, например удалите его в nginx.

Если у вас есть "server_tokens выключен"в вашей конфигурации (и кажется, что вы это делаете, поскольку там только 'nginx', а не 'nginx / 1.13.11'), тогда можно оставить все как есть. Проблема может возникнуть, если у вас есть уязвимая версия, и злонамеренный человек может использовать эту информацию для эксплуатации уязвимости, но для этого ваш nginx должен быть общедоступным. Итак, вкратце, используйте "server_tokens off;" и не открывайте порт nginx для всех IP-адресов, кроме Varnish, и вы должно быть безопасно.