asp.net - Удаление / скрытие / отключение чрезмерных заголовков HTTP-ответа в Azure / IIS7 без UrlScan





iis-7 penetration-testing response-headers (6)


Прокручивая предыдущие ответы от @ 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>

Мне нужно удалить избыточные заголовки (в первую очередь, пройти тестирование на проникновение). Я потратил время на решения, связанные с запуском UrlScan, но они громоздки, поскольку UrlScan необходимо устанавливать каждый раз при запуске экземпляра Azure .

Должно быть хорошее решение для Azure, которое не предполагает развертывание установщиков из startup.cmd.

Я понимаю, что заголовки ответов добавляются в разных местах :

  • Сервер : добавлен IIS.
  • X-AspNet-версия : добавлена ​​System.Web.dll во время Flush в классе HttpResponse
  • X-AspNetMvc-Version : Добавлен MvcHandler в System.Web.dll.
  • X-Powered-By : добавлено IIS

Есть ли способ настроить (через web.config и т. Д.?) IIS7, чтобы удалить / скрыть / отключить заголовки ответов HTTP, чтобы избежать предупреждения «Чрезмерные заголовки» на asafaweb.com , без создания модуля IIS или развертывания установщиков, которые должны запускаться каждый раз при запуске экземпляра Azure?




MSDN опубликовала эту статью о том, как скрыть заголовки на сайтах Azure. Теперь вы можете скрыть сервер из web.config, добавив запись в system.webServer

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

Однако VS будет недооценивать вышеупомянутое как недействительное. Вышеупомянутая ссылка имеет код как фото, который трудно найти. Версия MVC по-прежнему скрыта при запуске приложения, как указано выше, так же, как для x-powered-by и .Net-версии.




Ответ Ник Эванс прекрасен, но ...

Если вы удалите эти заголовки для целей безопасности , не забудьте изменить ASP.NET Session coockie name ! Потому что легче угадать используемый язык или версию сервера, когда вы это видите:

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

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



Там также есть пакет на NuGet, который поможет вам достичь этого через несколько строк конфигурации и никаких изменений в коде: NWebsec. Документы об удалении заголовков версий можно найти здесь: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Это демонстрация здесь: http://www.nwebsec.com/HttpHeaders/VersionHeaders (в Лазуре)

Отказ от ответственности: Я разработчик проекта.




Следующие изменения позволяют удалить эти заголовки HTTP-ответа в Azure без написания пользовательского HttpModule.

Большая часть информации в сети устарела и включает UrlScan (который с тех пор был интегрирован в IIS7, но с RemoveServerHeader=1 вариантом 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-версию , в web.config найдите / создайте <system.web> и добавьте:

  <system.web>
    <httpRuntime enableVersionHeader="false" />

    ...

Чтобы удалить X-AspNetMvc-версию , перейдите в 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>

    ...



Нажмите на свойства вашего проекта, перейдите в раздел веб-сайта, в разделе «Серверы», измените с IIS express на локальный IIS, он создаст для вас виртуальный каталог







asp.net iis-7 azure penetration-testing response-headers