Pull to refresh

Подмена HTTP-заголовка Server для различных веб-серверов

Reading time2 min
Views18K
Привет, Хабрачитатели.

Большинство (если не все) веб-серверы при ответе на HTTP-запрос по умолчанию заявляют о себе с помощью заголовка Server, сообщая в лучшем случае название используемого ПО, а в хучшем – версию, используемые модули и т.д. Их можно удобно просматривать с помощью таких дополнений, как например Server Spy для Mozilla Firefox.

Server Spy

Но далеко не все из веб-серверов позволяют в явном виде одной директивой отключить такое поведение. На мой взгляд, это потенциальная прореха в безопасности. В данной статье показано, как отключить отсылку заголовка Server или подменить его значение на произвольное для серверов Lighttpd, Nginx, Apache, G-WAN.
Подробнее под катом.

Lighttpd


Lighttpd – единственный из перечисленных серверов, в файле конфигурации которого предусмотрена подмена заголовка Server. Выглядит это так:
server.tag = "gws"

Nginx


Не раз встречал в Сети инструкции, как изменить заголовок Server в веб-сервере Nginx. Делается все в лоб – с помощью подмены значения в исходниках и перекомпиляции. Например www.xakep.ru/post/54168
Есть метод более простой. Достигнуть результата можно использованием комбинации модулей HttpHeadersModule и HttpHeadersMoreModule или еще более простой вариант с помощью одного HttpHeadersMoreModule.

С использованием комбинации модулей HttpHeadersModule и HttpHeadersMoreModule:
# Удаляем существующее значение заголовка Server
more_clear_headers 'Server';
# Задаем новое
add_header Server gws;


С помощью одного HttpHeadersMoreModule:
# только HttpHeadersMoreModule
more_set_headers 'Server: my-server';


Apache


В веб сервере Apache содержимое заголовка Server настраивается с помощью ServerTokens
По умолчанию используется значение Full. Показывается информация вида Apache/2.4.1 (Unix) PHP/4.2.2 MyMod/1.2
Минимум, к которому можно свести – это Apache. С помощью mod_header пробовал сделать конфигурацию, аналогичную Nginx. Не получилось – Apache игнорирует настройки и продолжает упорно выставлять значение Server согласно ServerTokens и ServerSignature.
Пришлось поставить mod_security и добавить в конфигурацию строку:
SecServerSignature "gws"
Заработало.

G-WAN


В случае с G-WAN конфига как такового не существует. Код на C в handler'е выглядит следующим образом:

xbuf_xcat(get_reply(argv),
"HTTP/1.1 200 OK\r\n"
"Content-type: text/html\r\n"
"Content-Length: 20\r\n"
"Server: gws\r\n"
"Connection: keep-alive\r\n\r\n"
"Hello, World");

// set the HTTP reply code
int *pHTTP_status = (int*)get_env(argv, HTTP_CODE);
if(pHTTP_status)
*pHTTP_status = 200; // 200:OK
return 2;


Тонкости настройки G-WAN не являются темой данной статьи, поэтому в детали не вдаюсь.

Замечания


В данной статье рассмотрены те веб-сервера, с которыми я работаю, и для тестирования не нужно было отдельно инсталлировать ПО. Если по аналогии Вы настроите любой другой веб-сервер — пишите, дополню статью.
Tags:
Hubs:
+5
Comments33

Articles

Change theme settings