it-swarm-ru.tech

Как удалить заголовки ответа IIS / ASP.NET

У меня есть пара серверов IIS/6.0, которые служба безопасности просит меня удалить пару заголовков ответов, которые отправляются клиентским браузерам по запросам. Они обеспокоены разглашением информации о платформе через заголовки ответов. Я удалил все HTTP-заголовки из IIS для веб-сайта (X-Powered-By или какой-то такой заголовок).

(Я лично знаю, что эту информацию можно легко узнать, даже если она скрыта, но это не мой звонок.)

Заголовки, которые я хочу удалить:

  • Сервер - Microsoft-IIS/6.0
  • X-AspNet-Version - 2.0.50727

Я также знаю, что ASP.NET MVC также испускает свой собственный заголовок, и если вы знаете, как его удалить, это было бы полезно.

  • X-AspNetMvc-Version - 1.0
48
Bryan Rehbein

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

В IIS откройте свойства веб-сайта и перейдите на вкладку "Заголовки HTTP". Большинство заголовков X можно найти и удалить здесь. Это можно сделать для отдельных сайтов или для всего сервера (измените свойства для объекта веб-сайтов в дереве).

Для заголовка сервера в IIS6 вы можете использовать инструмент Microsoft RLScan для его удаления. Port 80 Software также производит продукт под названием ServerMask , который позаботится об этом и о многом другом за вас.

Для IIS7 (и выше) вы можете использовать Модуль перезаписи URL , чтобы перезаписать заголовок сервера или очистить его значение. В файле web.config (на сайте или на сервере в целом) добавьте этот контент после установки модуля перезаписи URL:

<rewrite>    
  <outboundRules rewriteBeforeCache="true">
    <rule name="Remove Server header">
      <match serverVariable="RESPONSE_Server" pattern=".+" />
      <action type="Rewrite" value="" />
    </rule>
  </outboundRules>
</rewrite>

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

Для заголовка MVC в Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

Изменено 11-12-2019 для обновления информации IIS7, поскольку ссылка на блог TechNet больше не действительна.

32
Justin Scott

Чтобы удалить все пользовательские заголовки, которые раскрывают слишком много информации - методы различаются (к сожалению) для IIS 7:

Имя заголовка: X-Powered-By

Добавить:

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

в <system.webServer> раздел.

Имя заголовка: Сервер

Реализуйте модуль httpModule, который удаляет этот заголовок, вызывая Response.Headers.Remove ("Server") из события PreSendRequestHeaders. Еще один ресурс для этого: Закрытие вашего веб-приложения ASP.NET MVC на IIS 7

Имя заголовка: X-AspNet-Version

В разделе httpRuntime файла web.config - установите:

<httpRuntime enableVersionHeader="false" />

Имя заголовка: X-AspNetMvc-Version

Из события Application_Start в global.asax - выполните следующий код (C #):

MvcHandler.DisableMvcResponseHeader = true;
58
Adam

Помещение этого в файл web.config приложения ASP.NET избавит от заголовка X-AspNet-Version:

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

Обратите внимание, что тег system.web должен уже существовать в файле. Не создавайте дубликат, просто добавьте тег httpRuntime. Тег httpRuntime также может уже существовать. Если это так, просто добавьте атрибут или установите его значение, если он уже там.

16
squillman

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

Сервер,
X-Сеть САШ-версия,
X-AspNetMvc-версии,
X-Powered-By

Соответствующие произведения воспроизведены ниже:

Но нет простого способа удалить заголовок ответа Сервера через конфигурацию. К счастью, IIS7 обладает инфраструктурой управляемых подключаемых модулей, которая позволяет легко расширять ее функциональные возможности. Ниже приведен исходный код модуля HttpModule для удаления указанного списка заголовков ответа HTTP:

namespace Zen.Core.Web.CloakIIS
{
    #region Using Directives

    using System;
    using System.Collections.Generic;
    using System.Web;

    #endregion

    /// <summary>
    /// Custom HTTP Module for Cloaking IIS7 Server Settings to allow anonymity
    /// </summary>
    public class CloakHttpHeaderModule : IHttpModule
    {
        /// <summary>
        /// List of Headers to remove
        /// </summary>
        private List<string> headersToCloak;

        /// <summary>
        /// Initializes a new instance of the <see cref="CloakHttpHeaderModule"/> class.
        /// </summary>
        public CloakHttpHeaderModule()
        {
            this.headersToCloak = new List<string>
                                      {
                                              "Server",
                                              "X-AspNet-Version",
                                              "X-AspNetMvc-Version",
                                              "X-Powered-By",
                                      };
        }

        /// <summary>
        /// Dispose the Custom HttpModule.
        /// </summary>
        public void Dispose()
        {
        }

        /// <summary>
        /// Handles the current request.
        /// </summary>
        /// <param name="context">
        /// The HttpApplication context.
        /// </param>
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
        }

        /// <summary>
        /// Remove all headers from the HTTP Response.
        /// </summary>
        /// <param name="sender">
        /// The object raising the event
        /// </param>
        /// <param name="e">
        /// The event data.
        /// </param>
        private void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            this.headersToCloak.ForEach(h => HttpContext.Current.Response.Headers.Remove(h));
        }
    }
}

Убедитесь, что вы подписали сборку, затем вы можете установить ее в GAC вашего веб-сервера и просто внести следующую модификацию в файл web.config вашего приложения (или, если вы хотите, чтобы он применялся глобально, к machine.config):

<configuration>
    <system.webServer>
        <modules>
            <add name="CloakHttpHeaderModule" 
                 type="Zen.Core.Web.CloakIIS.CloakHttpHeaderModule, Zen.Core.Web.CloakIIS, 
                       Version=1.0.0.0, Culture=neutral, PublicKeyToken=<YOUR TOKEN HERE>" />
        </modules>
    </system.webServer>
</configuration>
5
HowardvanRooijen

Проверьте этот блог . Не используйте код для удаления заголовков ответов. Это нестабильно согласно Microsoft

Вместо этого используйте раздел пользовательских заголовков Web.config:

<system.webServer>          
<httpProtocol>
    <!-- Security Hardening of HTTP response headers -->
    <customHeaders>
        <!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent 
                Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
        <add name="X-Content-Type-Options" value="nosniff" />

        <!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not. 
                 By preventing a browser from framing your site you can defend against attacks like clickjacking. 
                 Recommended value "x-frame-options: SAMEORIGIN" -->
        <add name="X-Frame-Options" value="SAMEORIGIN" />

        <!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that 
                 they should only read the master crossdomain.xml file from the root of the website. 
                 https://www.Adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
        <add name="X-Permitted-Cross-Domain-Policies" value="master-only" />

        <!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers. 
                 Recommended value "X-XSS-Protection: 1; mode=block". -->
        <add name="X-Xss-Protection" value="1; mode=block" />

        <!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. 
                 If you have sensitive information in your URLs, you don't want to forward to other domains 
                 https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
        <add name="Referrer-Policy" value="no-referrer-when-downgrade" />

        <!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
        <remove name="X-Powered-By" />

        <!-- Ensure the cache-control is public, some browser won't set expiration without that  -->
        <add name="Cache-Control" value="public" />
    </customHeaders>
</httpProtocol>

<!-- Prerequisite for the <rewrite> section
            Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/Microsoft/url-rewrite -->
<rewrite>
    <!-- Remove Server response headers (OWASP Security Measure) -->
    <outboundRules rewriteBeforeCache="true">
        <rule name="Remove Server header">
            <match serverVariable="RESPONSE_Server" pattern=".+" />

            <!-- Use custom value for the Server info -->
            <action type="Rewrite" value="Your Custom Value Here." />
        </rule>
    </outboundRules>
</rewrite>
</system.webServer>
2
mitaka

Я использую следующий код и работает для меня IIS 7.5

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}
1
Nasir Mahmood

Я использую комбинацию Web.config а также Global.asax.cs, чтобы избавиться от всех пользовательских заголовков, включая следующие заголовки:

  • Сервер
  • X-Сеть САШ-версия
  • X-AspNetMvc-версия

Web.config:

<system.web> 
  <httpRuntime enableVersionHeader="false"/> 
</system.web>
<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer> 

Global.asax.cs:

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

Также см. https://stackoverflow.com/a/20739875/1678525

0
Jan H