Есть ли способ удалить заголовок ответа «Сервер» из IIS7? В некоторых статьях показано, что с помощью HttpModules можно добиться того же. Это будет полезно, если у нас нет прав администратора на сервере. Также я не хочу писать фильтр ISAPI.
У меня есть права администратора на моем сервере. Так что я не хочу делать вышеупомянутые вещи. Итак, пожалуйста, помогите мне сделать то же самое.
Ответы:
Добавьте это в свой global.asax.cs:
источник
NullReferenceException
в Кассини, если положитесьHttpContext.Current
. В этом сообщении блога показано, как это сделать, не нарушая при этом поддержку Cassini, если это важно для вас.PreSendRequestHeaders
в классе, реализующемIHttpModule
илиGlobal.asax
. Я был свидетелем того, как приложение зависало на сервере под нагрузкой.BeginRequest
Событие должно работать , чтобы сделать изменения заголовка ответа. См. Hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .В IIS7 вы должны использовать модуль HTTP. Создайте следующее как библиотеку классов в VS:
Затем добавьте следующее в свой web.config или настройте его в IIS (если вы настраиваете в IIS, сборка должна находиться в GAC).
источник
HttpApplication
, theHttpRequest
, theHttpContext
и theHttpResponse
нетnull
, а также проверить, чтоHttpRequest.IsLocal
естьfalse
.PreSendRequestHeaders
может вызвать проблемы с HttpCacheModule , вам следует использовать что-то вродеPostReleaseRequestState
.При включенном модуле перезаписи URL версии 2.0 для IIS (UrlRewrite) в разделе конфигурации
<configuration>
➡<system.webServer>
➡<rewrite>
добавьте правило для исходящего трафика :источник
rewrite
узелsystem.webServer
. Остерегайтесь, это приведет к сбою вашего сайта, если UrlRewrite не установлен на сервере. И вам лучше сначала использовать консоль конфигурации IIS, чтобы проверить, как она записывает эти узлы конфигурации.Скотт Митчелл в своем блоге предлагает решения для удаления ненужных заголовков .
Как уже было сказано здесь, в других ответах, для
Server
заголовка существует решение модуля http или решение web.config для IIS 10+ , или вы можете использовать URLRewrite вместо его гашения .Наиболее практичным решением для установки обновленной версии (IIS 10+) является использование
removeServerHeader
файла web.config:Для
X-AspNet-Version
иX-AspNetMvc-Version
он предлагает лучший способ, чем удаление их при каждом ответе: просто не генерировать их вообще.Используйте
enableVersionHeader
для отключенияX-AspNet-Version
в web.configИспользуйте
MvcHandler.DisableMvcResponseHeader
в событии .Net Application_Start для отключенияX-AspNetMvc-Version
И, наконец, удалите в конфигурации IIS
X-Powered-By
настраиваемый заголовок в web.config.Остерегайтесь, если у вас есть 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)).источник
На самом деле закодированные модули и примеры Global.asax, показанные выше, работают только для действительных запросов.
Например, добавьте <в конце вашего URL-адреса, и вы получите страницу «Плохой запрос», на которой по-прежнему отображается заголовок сервера. Многие разработчики не обращают на это внимания.
Показанные параметры реестра также не работают. URLScan - ЕДИНСТВЕННЫЙ способ удалить заголовок «сервер» (по крайней мере, в IIS 7.5).
источник
Или добавьте в web.config:
источник
X-AspNet-Version
иX-AspNetMvc-Version
header. Я знаю, что этот способ не всегда работает (если он когда-либо работает). См. Ответ @Frederic для более надежного способа их удаления.Эта
web.config
настройка позволяет удалить все ненужные заголовки из ответа ASP.NET (по крайней мере, начиная с IIS 10):Обратите внимание, что это скрывает все заголовки для «приложения», как и все другие подходы. Если вы, например, перейдете на страницу по умолчанию или страницу ошибки, созданную самим IIS или ASP.NET вне вашего приложения, эти правила не будут применяться. Поэтому в идеале они должны быть на корневом уровне в IIS, и этот порог может оставлять некоторые ответы об ошибках самому IIS.
PS В IIS 10 есть ошибка, из- за которой иногда отображается заголовок сервера даже при правильной конфигурации. К настоящему времени это должно быть исправлено, но IIS / Windows необходимо обновить.
источник
В дополнение к ответу на переопределение URL-адреса , вот полный XML для
web.config
Перезапись URL
источник
Чтобы удалить
Server:
заголовок, перейдите кGlobal.asax
, найдите / создайтеApplication_PreSendRequestHeaders
событие и добавьте следующую строку (спасибо BK и этому блогу, это также не приведет к сбою в Cassini / local dev):Если вам нужно полное решение для удаления всех связанных заголовков в Azure / IIS7, которое также работает с Cassini, перейдите по этой ссылке , где показан лучший способ отключить эти заголовки без использования HttpModules или URLScan.
источник
Если вы просто хотите удалить заголовок, вы можете использовать сокращенную версию ответа Люкиффера:
А потом в
Web.config
:источник
Попробуйте установить для
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
записи реестра значениеREG_DWORD
из1
.источник
OnPreSendRequestHeaders
обработчик событий (см. Выше) по какой-то причине никогда не запускается.UrlScan также может удалить заголовок сервера, используя
AlternateServerName=
под[options]
.источник
Следуя ответу eddiegroves , в зависимости от версии URLScan, вы можете предпочесть
RemoveServerHeader=1
под[options]
.Я не уверен, в какой версии URLScan был добавлен этот параметр, но он был доступен в версии 2.5 и новее.
источник
Я нашел статью, в которой объясняется, почему нам нужно как редактировать реестр, так и использовать такой инструмент, как UrlScan, чтобы правильно настроить это в IIS. Я следил за ним на наших серверах, и он работает: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Если вы используете только UrlScan, но не вносите изменения в реестр, в то время, когда вы останавливаете службу World Wide Publishing Service, ваш сервер будет возвращать HTTP-ответ сервера из файла HTTP.sys. Кроме того, вот распространенные ошибки использования инструмента UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
источник
В IIS 10 мы используем решение, аналогичное подходу Дрю, то есть:
И, очевидно, добавьте ссылку на эту dll в свой проект (ы), а также на модуль в конфигурации, которую вы хотите:
ВАЖНОЕ ПРИМЕЧАНИЕ 1. Для этого решения требуется, чтобы пул приложений был настроен как интегрированный;
ВАЖНОЕ ПРИМЕЧАНИЕ 2: это повлияет на все ответы в веб-приложении (включая css и js);
источник
Я исследовал это, и метод URLRewrite работает хорошо. Кажется, не могу найти хорошо написанное изменение. Я написал это совместимо с PowerShell v2 и выше и протестировал его на IIS 7.5.
источник
Вы можете добавить код ниже в файл Global.asax.cs
источник
Предложенное выше решение в сочетании сработало для меня со следующими изменениями. Здесь я публикую свой сценарий и решение.
Для меня я хотел удалить следующие заголовки:
Я добавил их в свой global.asax:
Вышеупомянутое событие не запускалось, поэтому я добавил следующее в web.config, и оно сработало.
а для удаления заголовка версии я также добавил в web.config следующее:
Изменения в web.config:
Надеюсь, поможет!
источник
Я пробовал все это здесь и на нескольких других похожих потоках переполнения стека.
Я немного повесил трубку, потому что забыл очистить кеш браузера после внесения изменений в конфигурацию. Если вы этого не сделаете и файл находится в вашем локальном кеше, он вернет его вам с исходными заголовками (да).
Я получил это в основном, удалив runAllManagedModulesForAllRequests:
Это удалило посторонние заголовки из большинства статических файлов, но я все еще получал заголовок «Сервер» в некоторых статических файлах в моем проекте WebAPI в чванстве.
Я наконец нашел и применил это решение, и теперь все ненужные заголовки исчезли:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
в котором обсуждается его код, который находится здесь:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
Это модуль Native-Code. Он может удалить заголовок сервера, а не просто удалить значение. По умолчанию удаляет:
источник
В IIS 7.5 и, возможно, в более новых версиях текст заголовка хранится в
iiscore.dll
Используя шестнадцатеричный редактор, найдите строку и слово «Сервер»
53 65 72 76 65 72
после нее и замените их нулевыми байтами. В IIS 7.5 это выглядит так:В отличие от некоторых других методов, это не приводит к снижению производительности. Заголовок также удаляется из всех запросов, даже при внутренних ошибках.
источник