Jak usunąć nagłówki odpowiedzi IIS / ASP.NET


46

Mam kilka serwerów IIS / 6.0, których zabezpieczenia prosi mnie o usunięcie kilku nagłówków odpowiedzi, które są wysyłane do przeglądarek klienta na żądanie. Są zaniepokojeni ujawnianiem informacji o platformie za pomocą nagłówków odpowiedzi. Usunąłem wszystkie nagłówki HTTP z konfiguracji IIS dla strony internetowej (X-Powered-By lub jakiś taki nagłówek).

(Osobiście wiem, że informacje te można łatwo znaleźć, nawet jeśli są ukryte, ale to nie moja rozmowa).

Nagłówki, które chcę usunąć:

  • Serwer - Microsoft-IIS / 6.0
  • Wersja X-AspNet - 2.0.50727

Wiem również, że ASP.NET MVC również emituje własny nagłówek, jeśli wiesz, jak go również usunąć, byłoby to pomocne.

  • Wersja X-AspNetMvc - 1.0

Odpowiedzi:


32

Twój dział bezpieczeństwa chce, abyś to zrobił, aby utrudnić identyfikację typu serwera. Może to zmniejszyć zaporę automatycznych narzędzi hakerskich i utrudnić włamanie się na serwer.

W IIS otwórz właściwości strony internetowej, a następnie przejdź do karty Nagłówki HTTP. Większość nagłówków X można znaleźć i usunąć tutaj. Można to zrobić dla poszczególnych witryn lub dla całego serwera (zmodyfikuj właściwości obiektu Witryny w drzewie).

W przypadku nagłówka serwera w IIS6 można użyć narzędzia Microsoft URLScan do zdalnej kontroli . Oprogramowanie Port 80 tworzy również produkt o nazwie ServerMask , który zadba o to i wiele więcej.

W przypadku IIS7 znajduje się świetny artykuł na temat używania niestandardowego modułu do modyfikowania nagłówka serwera.

Dla nagłówka MVC w Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

2
Zaakceptowana odpowiedź, chciałbym podzielić się tą odpowiedzią z @squillman. Web.config naprawić X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web>
Bryan Rehbein

Usunięcie nagłówka X umieszcza to w moim pliku web.config, więc zaoszczędź trochę czasu: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Broam

Broam, to właściwa odpowiedź ... dla IIS7. Pytanie dotyczy IIS6. Nie ma to wpływu na IIS6.
Anthony

56

Aby usunąć wszystkie niestandardowe nagłówki, które ujawniają zbyt wiele informacji - metody są różne (niestety) dla IIS 7:

Nazwa nagłówka: X-Powered-By

Dodaj:

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

w <system.webServer>dziale.

Nazwa nagłówka: Serwer

Zaimplementuj moduł httpModule, który usuwa ten nagłówek, wywołując Response.Headers.Remove („Serwer”) ze zdarzenia PreSendRequestHeaders. Kolejny zasób do tego: maskowanie aplikacji sieci Web ASP.NET MVC na IIS 7

Nazwa nagłówka: Wersja X-AspNet

W sekcji httpRuntime pliku web.config - ustaw:

<httpRuntime enableVersionHeader="false" />

Nazwa nagłówka: Wersja X-AspNetMvc

Ze zdarzenia Application_Start w global.asax - wykonaj następujący kod (C #):

MvcHandler.DisableMvcResponseHeader = true;

Chciałbym tylko coś sprecyzować: większość tych sztuczek będzie działać tylko z IIS> = 7 w trybie zintegrowanego potoku. W trybie klasycznym w najlepszym wypadku nic nie zrobi (<remove> wierszy w pliku web.config) lub wyrzuci wyjątek (bezpośrednie wywołania Response.Headers w global.asax, który jest innym rozwiązaniem do usuwania nagłówków). Pracuję nad witryną zablokowaną w trybie klasycznym i niestety nie udało mi się usunąć tych nagłówków.
AFract

16

Umieszczenie tego w pliku web.config aplikacji ASP.NET pozbywa się nagłówka X-AspNet-Version:

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

Zauważ, że znacznik system.web powinien już istnieć w pliku. Nie twórz duplikatu, po prostu dodaj tag httpRuntime. Tag httpRuntime może już istnieć. Jeśli tak, po prostu dodaj atrybut lub ustaw jego wartość, jeśli już istnieje.


Pozostawia to jednak nagłówek „powered by”.
UpTheCreek

ale kiedy umieszczam ten kod linii w system.webmojej witrynie, nie działa . wiesz dlaczego?
neda Derakhshesh

5

Właśnie przeszedłem cykl „hartowania” w moim obecnym projekcie - napisałem na blogu o przyjętym przez nas podejściu, które obejmuje moduł HTTP do usuwania następujących nagłówków :

Serwer,
wersja
X-AspNet , wersja X-AspNetMvc,
X-Powered-By

Istotne utwory przedstawione poniżej:

Ale nie ma łatwego sposobu na usunięcie nagłówka odpowiedzi serwera za pomocą konfiguracji. Na szczęście IIS7 ma zarządzaną infrastrukturę modułów wtykowych, która pozwala łatwo rozszerzyć jego funkcjonalność. Poniżej znajduje się źródło modułu HttpModule do usuwania określonej listy nagłówków odpowiedzi 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));
        }
    }
}

Upewnij się, że podpisujesz zestaw, a następnie możesz zainstalować go w GAC swoich serwerów internetowych i po prostu wprowadzić następującą modyfikację pliku web.config aplikacji (lub jeśli chcesz, aby była stosowana globalnie, w pliku 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
Pomijanie generowania nagłówków według konfiguracji wydaje się mieć znacznie większy sens niż generowanie nagłówków, a następnie ich usuwanie.
realMarkusSchmidt

1
Wygląda na to, że ten link jest już martwy. :-(
Danny Schoemann,

2

Sprawdź tego bloga . Nie używaj kodu do usuwania nagłówków odpowiedzi. Według Microsoftu jest niestabilny

Zamiast tego użyj niestandardowej sekcji Nagłówki 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>

To było rozwiązanie mojego problemu. przy użyciu win2008 R2 (IIS 7.5)
paqogomez

1

Używam następującego kodu i działa dla mnie iis 7.5

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

3
Co z twoimi obrazami i treściami, które nie przechodzą przez potok kodu?
Mark Sowul

co umieściłeś w „Serwerze”? powinno tak być? Response.Headers.Remove („Serwer: Microsoft-IIS / 7.0”); ? czy powinien to być serwer? proszę o pomoc
neda Derakhshesh

Umieściłem tylko „Serwer” nic więcej. jeśli nazwa nagłówka jest inna, możesz wypróbować ją pod inną nazwą.
Nasir Mahmood
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.