Подтвердить что ты не робот

Удаление заголовка сервера из статического содержимого в IIS 7/8

В целях повышения безопасности нашего API и сайта я удаляю заголовки, которые утечки информации о том, что сайт работает.

Пример перед снятием заголовков:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687

Web.config:

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
  </customHeaders>
</httpProtocol>

Global.asax.cs:

protected void Application_PreSendRequestHeaders() {
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
    Response.AddHeader("Strict-Transport-Security", "max-age=300");
    Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
}

И после этого все обращения к сайту и API возвращают более безопасные заголовки, например:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687

До сих пор так хорошо. Тем не менее, я заметил в Firebug, что если вы посмотрите на статический контент (например, load.gif), он по-прежнему содержит заголовок сервера.

HTTP/1.1 304 Not Modified
Cache-Control: no-cache
Accept-Ranges: bytes
Etag: "a3f2a35bdf45ce1:0"
Server: Microsoft-IIS/8.0
Date: Tue, 25 Jun 2013 18:33:16 GMT

Я предполагаю, что это как-то обрабатывается IIS, но не может найти нигде, чтобы удалить этот заголовок. Я попытался добавить:

<remove name="Server" /> 

в раздел httpProtocol/customHeaders в Web.config, как упоминалось выше. Я также попытался войти в раздел заголовков HTTP-ответов диспетчера IIS и добавить пару поддельных имен/значений для заголовка сервера. В обоих случаях он все равно возвращает

Server: Microsoft-IIS/8.0

при загрузке любых изображений, CSS или JS. Где/что мне нужно, чтобы установить что-то, чтобы исправить это?

4b9b3361

Ответ 1

Вы можете заставить все запросы пройти через управляемый код, добавив это в свой webconfig:

<modules runAllManagedModulesForAllRequests="true">

Тогда даже статические файлы должны придерживаться ваших правил заголовка.

Ответ 2

Точно так же, как в этом ответе, а в этот веб-сайт:, вы должны использовать следующие шаги:

С#:

namespace MvcExtensions.Infrastructure
{
    public class CustomServerName : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        public void Dispose() { }

        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

Web.config:

<system.webServer>
   <modules>
      <add name="CustomHeaderModule" type="MvcExtensions.Infrastructure.CustomServerName" />
   </modules>
</system.webServer>

Ответ 3

К сожалению, управляемые модули кода работают только для кода, проходящего через конвейер ASP.NET, в то время как другие правильно предположили, что можно заставить все запросы через управляемый код, я лично считаю, что это менее желательно.

Чтобы удалить заголовки из всех запросов, включая статический контент, который по умолчанию обслуживается напрямую, а не через управляемый код, можно использовать модуль Native-Code. К сожалению, модули Native-Code немного сложнее писать, поскольку они используют API-интерфейсы win32, а не ASP.NET, однако по моему опыту они гораздо более подходят для удаления заголовков.

Следующая ссылка имеет двоичные файлы и исходный код для модуля Native-Code, который можно использовать для удаления заголовков. Он не требует дополнительной настройки для удаления заголовков "Сервер", но другие заголовки для удаления могут быть добавлены в конфигурацию IIS.

http://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

Ответ 4

Единственным решением без простого перечисленного решения был заголовок "Сервер". Мне удалось удалить его локально в IIS и на веб-сайте Azure, добавив его в файл web.config.

<system.webServer>
  <security>
    <requestFiltering removeServerHeader="true" />
  </security>
</system.webServer>

Ответ 5

Используйте IIS UrlRewrite 2.0 для гашения заголовка ответа сервера. Добавьте следующий код в файл Web.config

 <system.webServer>
<rewrite>
<outboundRules>
<rule name="Remove RESPONSE_Server" >
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>

fooobar.com/questions/63073/...

Ответ 6

Ни одно из решений здесь не работает должным образом для меня.

Моим простым решением было добавить это в мой файл web.config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
           <remove name="Server" />
           <remove name="X-Powered-By" />
        </customHeaders>
    </httpProtocol>
</system.webServer>