В IIS 7.0
integrated mode
после удаления всех заголовков с помощью Response.ClearHeaders()
IIS добавят некоторые другие заголовки, такие как Server
и X-Powered-By
, которые показывают хорошую информацию для хакеров. Как я могу остановить это поведение (подумайте, что мне еще нужно добавить свои собственные заголовки)?
Как удалить пользовательские заголовки IIS, такие как X-Powered-By: ASP.NET от ответа?
Ответ 1
Вы можете добавить это в свой Web.Config:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Обновление: если вы используете среду MVC, я бы также рекомендовал удалить заголовки X-AspNetMvc-Version
и X-AspNet-Version
. Это достигается установкой MvcHandler.DisableMvcResponseHeader = true
в файле Global.asax
и <system.web><httpRuntime enableVersionHeader="false" /></system.web>
в Web.config
соответственно.
Ответ 2
X-Powered-By
настроен в IIS. В Windows 7 это специально:
- Диспетчер IIS
- ИМЯ КОМПЬЮТЕРОВ > Сайты > Веб-сайт по умолчанию
- Заголовки HTTP-заголовков
- Удалить
X-Powered-By
Я не уверен, что генерирует заголовок Server
.
Ответ 3
Для интегрированного режима IIS7 + eth0 имеет его: тег <customHeaders>
в web.config. Спасибо за это. Что касается заголовка "Сервер", то при использовании MVC вы можете просто добавить:
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
для вашего класса MvcApplication в Global.asax. В противном случае вы можете просто добавить пользовательский Http-модуль, обработать событие PreSendRequestHeaders и сделать то же самое.
Ответ 4
Следующий ответ включает полное решение, которое не требует URLScan или пользовательский HttpModule, и удаляет все связанные заголовки, о которых вы упоминаете. Он также работает на Azure.
Удаление/Скрытие/Отключение чрезмерных заголовков HTTP-ответа в Azure/IIS7 без UrlScan
Ответ 5
URLScan можно использовать для удаления заголовка сервера или для настройки другого заголовка сервера, http://learn.iis.net/page.aspx/938/urlscan-3-reference/
Но это никогда не мешает хакеру знать, что вы используете на самом деле. Есть, очевидно, другие способы обнаружения информации о вашем сервере.
Ответ 6
Вы можете использовать appcmd.exe(IIS 7 и выше), чтобы сделать свою работу. Сценарий будет таким:
C:\Windows\System32\inetsrv\appcmd.exe set config -section:system.webserver/httpProtocol /-customHeaders.["name='X-Powered-By'"] /commit:apphost
/commit:apphost
: Это фиксирует настройки конфигурации в соответствующем разделе местоположения в файле ApplicationHost.config.
Я обычно создаю пакетный файл всех этих скриптов, которые запускаю на веб-сервере после установки приложения.
Для приложений ASP.NET MVC подход отличается, и вы можете обратиться к другим ответам, приведенным здесь.
Ответ 7
Хотелось бы добавить, что для версий ASP.NET Core, в которых больше нет файла web.config, необходим другой подход.
Я сделал следующие изменения, чтобы удалить заголовки в ASP.NET Core 2.1:
Вы можете удалить заголовок x-powered-by, заменив
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
с
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
в файле applicationhost.config, который находится в папке .vs\config проекта.
Заголовок сервера можно удалить, добавив
.UseKestrel(c => c.AddServerHeader = false)
в файле Program.cs.