Удаление/скрытие / отключение избыточных заголовков ответов 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 77

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 ! Потому что легче угадать используемый язык или версию сервера, когда вы видите это:

enter image description here

чтобы изменить имя файла cookie: (быть творческим)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>