Як видалити заголовки відповідей IIS / ASP.NET


46

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

(Я особисто знаю, що цю інформацію можна легко дізнатися, навіть якщо вона прихована, але це не мій дзвінок.)

Заголовки, які я хочу видалити:

  • Сервер - Microsoft-IIS / 6.0
  • X-AspNet-версія - 2.0.50727

Я також знаю, що ASP.NET MVC також видає свій власний заголовок, якщо ви знаєте, як його також видалити, це було б корисно.

  • X-AspNetMvc-версія - 1.0

Відповіді:


32

Ваш відділ безпеки хоче, щоб ви це зробили, щоб ускладнити ідентифікацію типу сервера. Це може зменшити захист автоматизованих хакерських інструментів та ускладнити вторгнення людей у ​​сервер.

У IIS відкрийте властивості веб-сайту та перейдіть на вкладку заголовки HTTP. Тут можна знайти та видалити більшість X-заголовків. Це можна зробити для окремих сайтів або для всього сервера (змінити властивості об’єкта Веб-сайтів у дереві).

Для заголовка Сервера на IIS6 ви можете використовувати інструмент URLScan Microsoft для видалення цього. Програмне забезпечення Port 80 також виготовляє продукт під назвою ServerMask, який піклується про це та ще багато іншого для вас.

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

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

MvcHandler.DisableMvcResponseHeader = true;

2
Прийняв відповідь, бажаю, щоб я міг поділитися відповіддю з @squillman. Web.config для виправлення X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
Брайан Рехбін

Видалення заголовка X поміщає це в мій web.config, тому заощаджуйте час: <system.webServer> <httpProtocol> <customHeaders> <delete name = "X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Broam

Брам, це правильна відповідь ... для IIS7. Питання стосується IIS6. Це не впливає на IIS6.
Ентоні

56

Щоб видалити всі користувацькі заголовки, які розкривають занадто багато інформації - методи IIis 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-AspNet-Version

У розділі httpRuntime веб.config - встановіть:

<httpRuntime enableVersionHeader="false" />

Назва заголовка: X-AspNetMvc-Version

З події Application_Start в global.asax - виконайте такий код (C #):

MvcHandler.DisableMvcResponseHeader = true;

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

16

Якщо помістити це у файл web.config програми ASP.NET, ви позбудетеся від заголовка X-AspNet-Version:

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

Зверніть увагу, що тег system.web вже повинен існувати у файлі. Не створюйте дублікат, просто додайте тег httpRuntime. Тег httpRuntime також може вже існувати. Якщо так, просто додайте атрибут або встановіть його значення, якщо воно вже є.


Однак це залишає заголовок "powered by".
UpTheCreek

але коли я розміщую цей код рядка на system.webсвоєму веб-сайті, знижується. ти знаєш чому?
neda Derakhshesh

5

Щойно пройшовши цикл «загартовування» в моєму поточному проекті, я розповів про підхід, який ми застосували, який включає HTTPModule для видалення таких заголовків :

Сервер,
версія X-AspNet, версія
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>

2
Придушення генерації заголовків за конфігурацією, здається, має набагато більше сенсу, ніж створення заголовків та видалення їх.
realMarkusSchmidt

1
Здається, що це посилання зараз мертве. :-(
Денні Шоман

2

Перевірте цей блог . Не використовуйте код для видалення заголовків відповідей. За даними 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>

Це було вирішенням моєї проблеми. використовуючи win2008 R2 (IIS 7.5)
paqogomez

1

Я використовую наступний код і працює для мене iis 7.5

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

3
Що з твоїми зображеннями та вмістом, який не проходить кодовий конвеєр?
Марк Совул

що ти поставив у "Сервер"? чи має бути так? Response.Headers.Remove ("Сервер: Microsoft-IIS / 7.0"); ? або це повинен бути Сервер? будь ласка, допоможіть
neda Derakhshesh

Я нічого більше не поставив "Сервер". якщо назва вашого заголовка інша, ви можете спробувати його з іншим ім’ям.
Насір Махмуд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.