Удаление/скрытие / отключение избыточных заголовков ответов HTTP в Azure / IIS7 без UrlScan
Мне нужно удалить чрезмерное заголовки (главным образом пройти испытание проникания). Я потратил время, глядя на решения, которые включают в себя запуск UrlScan, но они громоздки, как UrlScan необходимо устанавливать каждый раз при запуске экземпляра Azure.
должно быть хорошее решение для Azure, которое не включает развертывание установщиков из запуска.УМК.
Я понимаю, что заголовки ответов добавляются в другой места:
- сервер: добавлено IIS.
- X-AspNet-Version: добавлены системы.Сеть.dll на момент Флеша в HttpResponse class
- X-AspNetMvc-Version: добавлено MvcHandler в системе.Сеть.файл DLL.
- X-Powered-By: добавлено IIS
есть ли способ настроить (через интернет.config etc.?) IIS7 для удаления / скрытия / отключения ответа HTTP заголовки, чтобы избежать предупреждения "чрезмерные заголовки" в asafaweb.com, без создания модуля IIS или развертывания установщиков, которые необходимо запускать каждый раз при запуске экземпляра Azure?
5 ответов:
следующие изменения позволяют удалить эти заголовки ответов HTTP в Azure без написание пользовательского HttpModule.
большая часть информации в сети устарела и включает UrlScan (который с тех пор был интегрирован в IIS7, но с удалены). Ниже приведено самое аккуратное решение, которое я нашел (благодаря этот блог,ответ и этот блог комбинированный.)
удалить сервер перейдите к глобальной.асакс, найди / создайApplication_PreSendRequestHeaders
событие и добавить следующее (Спасибо BK и этот блог это также не подведет на Cassini / local dev):Edited April 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 в интернете.конфиг найти/создать
<system.web>
и добавить:<system.web> <httpRuntime enableVersionHeader="false" /> ...
удалить X-AspNetMvc-Version перейдите к глобальной.асакс, найди / создай
Application_Start
событие и добавить строку следующим образом:protected void Application_Start() { MvcHandler.DisableMvcResponseHeader = true; }
удалить X-Powered-By в интернете.конфиг найти/создать
<system.webServer>
и добавить:<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> ...
MSDN опубликовано в этой статье о том, как скрыть заголовки на веб-сайтах Azure. Теперь вы можете скрыть сервер из интернета.конфигурация путем добавления записи в систему.webServer
<security> <requestFiltering removeServerHeader ="true" /> </security>
против воли хмурится в выше, как будто инвалид. Приведенная выше ссылка имеет код в виде фото, трудно найти. Версия MVC по-прежнему скрыта в запуске приложения, как указано выше, то же самое для x-powered-by и версии .Net.
есть также пакет на NuGet, который поможет вам достичь этого через несколько строк конфигурации и без изменений в коде: NWebsec. Документы по удалению заголовков версий можно найти здесь:https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
Это демо здесь:http://www.nwebsec.com/HttpHeaders/VersionHeaders (в Azure)
отказ от ответственности: я разработчик на проект.
свертывание предыдущих ответов от @giveme5minutes и @AKhooli поскольку они относятся к веб-сайтам Azure плюс несколько других элементов, которые сканер хочет видеть, это изменения, которые я сделал, чтобы сделать ASafaWeb счастливым с сайтом Azure.
Он все еще жалуется на то, что файл cookie заголовка Azure affinity не является только https, но affinity-это тип файла 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>
ответ Ника Эванса идеален, но...
если вы удалите эти заголовки для безопасность цель, не забудьте изменить
ASP.NET Session coockie name
! Потому что легче угадать используемый язык или версию сервера, когда вы видите это:чтобы изменить имя файла cookie: (быть творческим)
<system.web> <sessionState cookieName="PHPSESSID" /> </system.web>