Как удалить HTTP-заголовки ASP.Net MVC по умолчанию?

Каждая страница в приложении MVC, с которой я работаю, задает эти HTTP-заголовки в ответах:

X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0

Как предотвратить их показ?

Ответ 1

"powered by" - это настраиваемый заголовок в IIS. Изменение зависит от версии IIS, которую вы используете. Для получения дополнительной информации о том, как изменить или удалить, см. Здесь:

http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders

Чтобы удалить заголовок MVC,

В Global.asax в событии запуска приложения:

MvcHandler.DisableMvcResponseHeader = true;

Поместите это в web.config, чтобы избавиться от заголовка X-AspNet-версии:

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

Ответ 2

Вы также можете удалить их, добавив код в файл global.asax:

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
 {
   HttpContext.Current.Response.Headers.Remove("X-Powered-By");
   HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
   HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
   HttpContext.Current.Response.Headers.Remove("Server");
 }

Ответ 3

Я нашел эту конфигурацию в моей web.config, которая была для New Web Site..., созданной в Visual Studio (в отличие от New Project...). Поскольку в этом вопросе указывается приложение ASP.NET MVC, оно не является релевантным, но все же является опцией.

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

Обновить. Кроме того, у Troy Hunt есть статья под названием Shhh... не позволяйте вашим заголовкам ответов говорить слишком громко с подробными инструкциями по удалению этих заголовки, а также ссылку на его ASafaWeb инструмент для сканирования для них и других конфигураций безопасности.

Ответ 4

Как описано в Cloaking вашего веб-приложения ASP.NET MVC в IIS 7, вы можете отключить заголовок X-AspNet-Version, применив следующий раздел конфигурации к ваш web.config:

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

и удалите заголовок X-AspNetMvc-Version, изменив свой файл Global.asax.cs следующим образом:

protected void Application_Start() 
{ 
    MvcHandler.DisableMvcResponseHeader = true; 
}

Как описано в Пользовательских заголовках Вы можете удалить заголовок "X-Powered-By", применив следующий раздел конфигурации к вашему web.config:

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer>

Нет простого способа удалить заголовок ответа "Server" с помощью конфигурации, но вы можете реализовать HttpModule для удаления определенных заголовков HTTP, как описано в Cloaking your ASP.NET MVC Web Application на IIS 7 и в how-to-remove-server-x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7.

Ответ 5

.NET Core

Чтобы удалить заголовок Сервер, в файле Program.cs, добавьте следующий параметр, когда вызывается .UseKestrel:

.UseKestrel(opt => opt.AddServerHeader = false)

Чтобы удалить заголовок X-Powered-By, если он развернут в IIS, отредактируйте файл web.config и добавьте следующий раздел в тег system.webServer:

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

.NET 4.5.2

Чтобы удалить заголовок Сервер, в файле global.asax добавьте следующее:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] headers = { "Server", "X-AspNet-Version" };

        if (!Response.HeadersWritten)
        {
            Response.AddOnSendingHeaders((c) =>
            {
                if (c != null && c.Response != null && c.Response.Headers != null)
                {
                    foreach (string header in headers)
                    {
                        if (c.Response.Headers[header] != null)
                        {
                            c.Response.Headers.Remove(header);
                        }
                    }
                }
            });
        }

    }

Pre.NET 4.5.2

Добавьте в свой проект следующий класс С#:

public class RemoveServerHeaderModule : 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 добавьте следующие <modules> раздел:

<system.webServer>
    ....
 <modules>
    <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
 </modules>

Однако у меня была проблема, когда подпроекты не смогли найти этот модуль. Не весело.

Удаление заголовка X-AspNetMvc-версии

Чтобы удалить тег '' X-AspNetMvc-Version '' для любой версии .NET, измените файл '' web.config ', чтобы включить:

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

Спасибо Microsoft за то, что это невероятно сложно. Возможно, это было вашим намерением, чтобы вы могли отслеживать установки IIS и MVC по всему миру...

Ответ 6

В Asp.Net Core вы можете редактировать файлы web.config следующим образом:

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

Вы можете удалить заголовок сервера в настройках Kestrel:

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 

Ответ 7

Как показано на Удаление стандартных заголовков серверов на веб-сайтах Windows Azure, вы может удалять заголовки со следующим:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true"/>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

Это удаляет заголовок сервера и заголовки X.

Это работало локально в моих тестах в Visual Studio 2015.

Ответ 8

Вы можете изменить любой заголовок или что-нибудь в Application_EndRequest() попробуйте

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}

Ответ 9

Для полноты есть другой способ удалить заголовок Server, используя regedit.

Смотрите этот блог MSDN.

Создайте запись DWORD под названием DisableServerHeader в следующем ключе реестра и установите для нее значение 1.

HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Параметры

Я предпочел бы найти правильное решение с помощью Web.config, но использование <rewrite> не очень хорошо, потому что для этого требуется, чтобы модуль перезаписи был установлен, и даже тогда он действительно не удалит заголовок, просто пуст его.

Ответ 10

Заголовок X-Powered-By добавляется IIS к HTTP-ответу, поэтому вы можете удалить его даже на уровне сервера через диспетчер IIS:

Вы можете напрямую использовать web.config:

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