Вопрос: Как удалить заголовки ответов IIS / ASP.NET


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

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

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

  • сервер - Microsoft-IIS / 6.0
  • X-Сеть САШ-версия - 2.0.50727

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

  • X-AspNetMvc-версия - 1,0

45
2018-06-12 16:31


Источник




Ответы:


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

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

Для заголовка сервера в IIS6 вы можете использовать Microsoft URLScan инструмент для удаленного. Программное обеспечение Port 80 также производит продукт под названием маска-сервер что позаботится об этом и многое другое для вас.

Для IIS7 существует отличная статья при использовании настраиваемого модуля для изменения заголовка сервера.

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

MvcHandler.DisableMvcResponseHeader = true;

32
2018-06-12 16:37



Принятый ответ, хочу, чтобы я мог поделиться с ним вопросом с @squillman. Web.config для исправления X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web> - Bryan Rehbein
Удаление заголовка X помещает это в мой web.config, поэтому сэкономьте некоторое время: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </ customHeaders> </ HTTPProtocol> </system.webServer> - Broam
Бром, это правильный ответ ... для IIS7. Вопрос в IIS6. Это не влияет на IIS6. - Anthony


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

Название заголовка: X-Powered-By

Добавить:

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

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

Название заголовка: сервер

Внедрите httpModule, который удаляет этот заголовок, вызывая Response.Headers.Remove («Сервер») из события PreSendRequestHeaders. Другой ресурс для этого: Закрашивание веб-приложения ASP.NET MVC на IIS 7

Название заголовка: X-Сеть САШ-версия

В разделе httpRuntime файла web.config:

<httpRuntime enableVersionHeader="false" />

Название заголовка: X-AspNetMvc-версия

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

MvcHandler.DisableMvcResponseHeader = true;

54
2018-06-14 16:58



Я просто хочу что-то уточнить: большинство этих трюков будут работать только с IIS> = 7 в режиме Integrated Pipeline. В классическом режиме он в лучшем случае ничего не сделает (<удалить> строки в web.config) или вызовет исключение (прямые вызовы Response.Headers в global.asax, что является еще одним решением для удаления заголовков). Я работаю над сайтом, застрявшим в классическом режиме, и, к сожалению, я не смог удалить эти заголовки. - AFract


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

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

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


16
2018-06-12 16:43



Однако это оставляет заголовок «приведенным в действие». - UpTheCreek
но когда я помещаю этот код строки в system.web мой сайт не работает. ты знаешь почему? - neda Derakhshesh


Только что прошел через «упрочняющий» цикл моего текущего проекта - Я писал о подходе, который мы использовали, который включает 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>

4
2017-08-26 08:17



Подавить генерацию заголовков по конфигурации, похоже, имеет гораздо больше смысла, чем создание заголовков, а затем удаление. - realMarkusSchmidt
Похоже, эта связь теперь мертва. :-( - Danny Schoemann


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

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

1
2017-11-19 10:22



Как насчет ваших изображений и контента, которые не проходят через конвейер кода? - Mark Sowul
что вы положили на «Сервер»? должно быть так? Response.Headers.Remove («Сервер: Microsoft-IIS / 7.0»); ? или он должен быть сервером? пожалуйста помоги - neda Derakhshesh
Я больше ничего не ставил «Сервер». если ваше имя заголовка отличается, вы можете попробовать его с другим именем. - Nasir Mahmood


Проверьте этот блог, Не используйте код для удаления заголовков ответов. Это неустойчиво согласно 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>

0
2017-08-01 18:05