Скрываем версию Apache

Для самых параноистых фанатов безопасности скрываем из заголовков, отдаваемых сервером, упоминание о версии Apache.

Обычно данные заголовки скрыты от пользователей, так как содержат в основном служебную информацию. Однако есть много способов просмотреть этот список. Например, для пользователей браузера Firefox — плагин LiveHTTPHeaders. В этом списке нас интересует заголовок Server. Как пример: из его значения [Apache/2.2.12 (CentOS) PHP/5.3.27-1.dotdeb.0], на сервере установлено следующее ПО: ОС — CentOS  сервер — Apache 2.2.12 и PHP 5.3.27-1.dotdeb.0. Так вот, способ повышения безопасности, состоит в том, чтобы скрыть от получателя (HTTP-клиента) эту информацию. Делается это с помощью директивы Apache — ServerTokens. Прописана она в файле конфигурации httpd.conf. Вот значения, которые принимает директива и соответствующие ей значения заголовка Server:

Значение директивыЗначение заголовка Server
ServerTokens ProdServer: Apache
ServerTokens MajorServer: Apache/2
ServerTokens MinorServer: Apache/2.2
ServerTokens MinimalServer: Apache/2.2.12
ServerTokens OsServer: Apache/2.2.12 (CentOS)
ServerTokens FullServer: Apache/2.2.12 (CentOS) PHP/5.3.27-1.dotdeb.0 my_mod1/X.Y my_mod2/W.Z

Все очень просто. Одно лишь замечание по поводу значения Full. Если используется это значение, то сервер выдает не только версии ОС и сервера, но и версии модулей, установленных на сервере — PHP/5.3.27-1.dotdeb.0 my_mod1/X.Y my_mod2/W.Z. Причем модуль сам должен добавить свою версию. Делается это с помощью функции ap_add_version_component(server_pool, "my_mod1/X.Y"). По умолчанию в Apache используется значение Full, любителям сверхбезопасности рекомендуем использовать Prod, тем самым сокращая информацию, отправляемую клиенту, до одного названия сервера.

Также некоторыми возможностями в этой области обладает и PHP. В файле php.ini есть переменная expose_php, которая может принимать значения: On и Off. Которые, соответственно, добавляют или удаляют информацию о версии PHP в заголовок Server (а также в X-Powered-By).

Ну и для полноты картины опишем еще одну подобную директиву, про которую автор не упомянул, а именно ServerSignature. Она также выводит данные о версии ПО, но в отличие от ServerTokens делает это не в заголовок Server, а в некоторые HTML страницы, например: листинг каталогов, страницы ошибок и т.п. Вот ее значения и соответствующие результаты:

Значение директивыРезультат
ServerSignature OnApache/2.2.12 (CentOS) PHP/5.3.27 Server at 127.0.0.1 Port 80
ServerSignature Off 
ServerSignature EmailApache/2.2.12 (CentOS) PHP/5.3.27 Server at 127.0.0.1 Port 80

Разница On и Email заключается в ссылке mailto на виртуальном хосте.