Скотт Митчелл в своем блоге предлагает решения для удаления ненужных заголовков .
Как уже было сказано здесь, в других ответах, для Server
заголовка существует решение модуля http или решение web.config для IIS 10+ , или вы можете использовать URLRewrite вместо его гашения .
Наиболее практичным решением для установки обновленной версии (IIS 10+) является использование removeServerHeader
файла web.config:
<system.webServer>
...
<security>
<requestFiltering removeServerHeader="true" />
</security>
...
</system.webServer>
Для X-AspNet-Version
и X-AspNetMvc-Version
он предлагает лучший способ, чем удаление их при каждом ответе: просто не генерировать их вообще.
Используйте enableVersionHeader
для отключения X-AspNet-Version
в web.config
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Используйте MvcHandler.DisableMvcResponseHeader
в событии .Net Application_Start для отключенияX-AspNetMvc-Version
MvcHandler.DisableMvcResponseHeader = true;
И, наконец, удалите в конфигурации IIS X-Powered-By
настраиваемый заголовок в web.config.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Остерегайтесь, если у вас есть ARR (маршрутизация запросов приложений), он также добавит свой собственный X-Powered-By
, который не будет удален настройками пользовательских заголовков. Его нужно удалить через диспетчер IIS, конфигурацию редактора в корне IIS (не на сайте): перейдите к system.webServer/proxy
узлу и установите arrResponseHeader
значение false
. После IISReset
, это учитывается.
(Я нашел это здесь , за исключением того, что этот пост посвящен старому способу настройки IIS 6.0.)
Не забывайте, что решение по коду приложения не применяется по умолчанию к заголовку, сгенерированному для статического содержимого (вы можете активировать его runAllManagedModulesForAllRequests
для его изменения, но при этом все запросы будут запускаться .Net pipeline). Это не проблема, X-AspNetMvc-Version
поскольку он не добавляется к статическому контенту (по крайней мере, если статический запрос не выполняется в конвейере .Net).
Боковое примечание: когда цель состоит в том, чтобы скрыть используемую технологию, вы также должны изменить стандартные имена файлов cookie .Net ( .ASPXAUTH
если формы активированы (использовать name
атрибут в forms
теге в web.config), ASP.NET_SessionId
(использовать <sessionState cookieName="yourName" />
в web.config в system.web
теге), __RequestVerificationToken
(изменить его по коду с AntiForgeryConfig.CookieName
, но, к сожалению, не относится к скрытому вводу, который эта система генерирует в html)).