Удаление/скрытие/отключение чрезмерных заголовков HTTP-ответа в Azure/IIS7 без UrlScan
Мне нужно удалить избыточные заголовки (в первую очередь для прохождения тестирования на проникновение). Я потратил время на решения, связанные с запуском UrlScan, но они громоздки, поскольку UrlScan необходимо устанавливать каждый раз при запуске экземпляра Azure.
Должно быть хорошее решение для Azure, которое не предполагает развертывание установщиков из startup.cmd.
Я понимаю, что заголовки ответов добавлены в разные места:
- Сервер: добавлен IIS.
- X-AspNet-Version: добавлено System.Web.dll во время Flush в классе HttpResponse
- X-AspNetMvc-Version: добавлен MvcHandler в System.Web.dll.
- X-Powered-By: добавлен IIS
Есть ли способ настроить (через web.config и т.д.?) IIS7, чтобы удалить/скрыть/отключить заголовки ответов HTTP, чтобы избежать предупреждения "Чрезмерные заголовки" на asafaweb.com, без создания модуля IIS или развертывания установщиков, которые нужно запускать каждый раз при запуске экземпляра Azure?
Ответы
Ответ 1
Следующие изменения позволяют удалить эти заголовки HTTP-ответа в Azure без написания пользовательского HttpModule.
Большая часть информации в сети устарела и включает UrlScan (который с тех пор был интегрирован в IIS7, но с удаленной опцией RemoveServerHeader=1
). Ниже представлено самое опрятное решение, которое я нашел (спасибо этот блог, этот ответ, и этот блог в сочетании).
Чтобы удалить Сервер, перейдите в Global.asax, найдите/создайте событие Application_PreSendRequestHeaders
и добавьте следующее (спасибо BK и этот блог, это также не сработает на Cassini/local dev):
Отредактированный апрель 2014: вы можете использовать события PreSendRequestHeaders и PreSendRequestContext с собственными модулями IIS, но не используйте их с управляемыми модулями, которые реализуют IHttpModule. Установка этих свойств может вызвать проблемы с асинхронными запросами. Правильная версия - использовать событие BeginRequest.
protected void Application_BeginRequest(object sender, EventArgs e)
{
var application = sender as HttpApplication;
if (application != null && application.Context != null)
{
application.Context.Response.Headers.Remove("Server");
}
}
Чтобы удалить X-AspNet-Version, в web.config найдите/создайте <system.web>
и добавьте:
<system.web>
<httpRuntime enableVersionHeader="false" />
...
Чтобы удалить X-AspNetMvc-Version, перейдите в Global.asax, найдите/создайте событие Application_Start
и добавьте строку следующим образом:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Чтобы удалить X-Powered-By, в web.config найдите/создайте <system.webServer>
и добавьте:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
Ответ 2
MSDN опубликовала эту статью о том, как скрыть заголовки на сайтах Azure. Теперь вы можете скрыть сервер от web.config, добавив запись в system.webServer
<security>
<requestFiltering removeServerHeader ="true" />
</security>
VS будет хмуриться вышеприведенным как недействительным. Вышеупомянутая ссылка имеет код как фото, который трудно найти.
Версия MVC по-прежнему скрыта при запуске приложения, как указано выше, так же, как для x-powered-by и .Net-версии.
Ответ 3
Там также есть пакет на NuGet, который поможет вам добиться этого через несколько строк конфигурации и никаких изменений в коде: NWebsec. Документы об удалении заголовков версий можно найти здесь: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
Здесь показано: http://www.nwebsec.com/HttpHeaders/VersionHeaders (в Azure)
Отказ от ответственности: я разработчик проекта.
Ответ 4
Повторяя предыдущие ответы от @giveme5minutes и @AKhooli, поскольку они относятся к Azure Websites, а также некоторые другие элементы, которые сканер хочет увидеть, это те изменения, которые я сделал, чтобы сделать ASafaWeb счастливым с сайтом Azure.
Он по-прежнему жалуется, что cookie заголовка азартной рекламы не является только https, но сродство - это тип файла cookie, который вы хотите воспроизвести в любом случае, правильно?
<system.web>
<compilation debug="false">
<httpRuntime enableVersionHeader="false" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />
<customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<security>
<!--removes Azure headers-->
<requestFiltering removeServerHeader="true" />
</security>
</system.webServer>
Ответ 5
Ответ Ник Эванс совершенен, но...
Если вы удалите эти заголовки для безопасности, не забудьте изменить ASP.NET Session coockie name
!
Потому что легче угадать используемый язык или версию сервера, если вы это видите:
![введите описание изображения здесь]()
Чтобы изменить имя файла cookie: (быть творческим)
<system.web>
<sessionState cookieName="PHPSESSID" />
</system.web>