Вопрос или проблема
Я пытаюсь удалить заголовок сервера Microsoft-HTTPAPI/2.0 из своих HTTP-ответов, следуя этой статье на MSDN. В настоящее время я применяю решение на основе реестра на Windows Server 2008 R2 и Windows 10, но у меня ничего не получается. Я по-прежнему получаю заголовки, когда отправляю HTTP-запрос с пустым заголовком Host
.
curl -X GET "127.0.0.1" -H "Host:" --head
Команда выше возвращает HTTP 400 Bad Request с Server: Microsoft-HTTPAPI/2.0
.
Существует ли какой-либо более новый подход для удаления этого конкретного заголовка? Я знаю, что этот вопрос задавался ранее для IIS 7 (возможно, решение по-прежнему работает), но перезагрузка не решает проблему на двух упомянутых мной компьютерах с Windows.
Заранее спасибо.
ps. Я понимаю, что это своего рода безопасность в тайне, но аудиторы требуют этого.
Если заголовок сервера в ответе возвращает Microsoft-HttpApi/2.0
, это означает, что вызывается HTTP.sys, а не IIS. Эксплуатация и сканирование портов используют это как средство определения сервера IIS (даже если он в остальном скрывает заголовок сервера).
Вы можете протестировать это, вызвав ошибку с помощью CURL:
curl -v http://www.yourdomain.com/ -H "Range: bytes=00-18446744073709551615"
Вы увидите что-то подобное, если ваш сервер отправляет этот заголовок:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 19 Dec 2019 00:45:40 GMT
Connection: close
Content-Length: 339
Вы можете добавить значение в реестр, чтобы HTTP.sys не включал заголовок.
- Откройте Regedit
- Перейдите к:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
- Если
DisableServerHeader
не существует, создайте его (DWORD
32bit) и
установите значение2
. Если он существует, а значение не2
, установите его
на2
. - Перезагрузите сервер ИЛИ перезапустите службу HTTP, вызвав “net stop http”, затем “net start http”
Справка: WS/WCF: Удаление заголовка сервера
После добавления ключа реестра ответ выглядит следующим образом:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Date: Thu, 19 Dec 2019 00:45:40 GMT
Connection: close
Content-Length: 339
Публикую здесь, чтобы люди, которым это нужно, могли это найти. (Спасибо, Oram!)
По комментариям Джеффри ниже это сработало
- Откройте Regedit
- Перейдите к: Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
- Если DisableServerHeader не существует, создайте его (DWORD 32bit) и установите значение 2. Если он существует, а значение не 2, установите его на 2.
- Перезагрузите сервер ИЛИ перезапустите службу HTTP, вызвав “net stop http”, затем “net start http”
Не забудьте перезапустить службу HTTP, иначе это решение не сработает.
Проверено на Windows 2019 Server с IIS 10.
Ответ или решение
Для удаления заголовка Microsoft-HTTPAPI/2.0
из HTTP-ответов на IIS 8 и 10 выполните следующие шаги:
-
Понять источник заголовка: Заголовок
Microsoft-HTTPAPI/2.0
указывает, что сервер отвечает через HTTP.sys, а не IIS. Это может произойти, когда запрос достигает уровня транспортного протокола, и IIS не обрабатывает его. -
Изменение реестра:
- Откройте редактор реестра (
regedit
). - Перейдите по следующему пути:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
- Если параметр
DisableServerHeader
отсутствует, создайте его:- Щелкните правой кнопкой мыши на
Parameters
, выберитеNew
, затемDWORD (32-bit) Value
и назовите егоDisableServerHeader
. - Установите значение этого параметра на
2
.
- Щелкните правой кнопкой мыши на
- Если параметр существует, убедитесь, что его значение равно
2
. Если оно другое, измените его на2
.
- Откройте редактор реестра (
-
Перезагрузка службы HTTP:
- После внесения изменений необходимо перезагрузить сервер или выполнить команды для перезапуска службы HTTP. Откройте командную строку с правами администратора и выполните:
net stop http net start http
- После внесения изменений необходимо перезагрузить сервер или выполнить команды для перезапуска службы HTTP. Откройте командную строку с правами администратора и выполните:
-
Тестирование изменений:
- Убедитесь, что изменения успешно применены. Для этого выполните запрос с помощью
curl
:curl -X GET "127.0.0.1" -H "Host:"
- Если заголовок
Server
больше не отображается в ответе, значит, изменения были успешными.
- Убедитесь, что изменения успешно применены. Для этого выполните запрос с помощью
-
Дополнительные соображения:
- Убедитесь, что все службы, которые могут вызывать работу HTTP.sys, действительно обеспечивают корректное исполнение. Например, приложения, которые перехватывают запросы на более низком уровне, могут вызвать данный заголовок.
- Помните, что это мероприятие не только избавляет от заголовка, но и может отключить некоторые функции отслеживания и управления со стороны IIS.
Если вы следовали всем шагам и все равно сталкиваетесь с проблемой, убедитесь, что ваша версия Windows и IIS совместимы с приведенными инструкциями, и проверьте наличие других служб или настроек, которые могут повлиять на поведение сервера.