Frage So entfernen Sie IIS / ASP.NET-Antwortheader


Ich habe ein paar IIS / 6.0-Server, die von der Sicherheit aufgefordert werden, einige Antwortheader zu entfernen, die bei Anfragen an Clientbrowser gesendet werden. Sie sind besorgt über die Weitergabe von Plattforminformationen über Antwortheader. Ich habe alle HTTP-HEADERS aus der IIS-Konfiguration für die Website entfernt (X-Powered-By oder eine solche Kopfzeile).

(Ich persönlich weiß, dass diese Information leicht gefunden werden kann, auch wenn sie versteckt ist, aber es ist nicht mein Ruf.)

Header, die ich entfernen möchte:

  • Server - Microsoft-IIS / 6.0
  • X-AspNet-Version - 2.0.50727

Ich weiß auch, dass ASP.NET MVC auch seinen eigenen Header ausgibt, wenn Sie wissen, wie man es auch entfernt, das wäre hilfreich.

  • X-AspNetMvc-Version - 1.0

45
2018-06-12 16:31


Ursprung




Antworten:


Ihre Sicherheitsabteilung möchte, dass Sie dies tun, um den Servertyp schwerer zu identifizieren. Dies kann die Sperrung automatisierter Hacker-Tools verringern und den Einbruch in den Server erschweren.

Öffnen Sie in IIS die Websiteeigenschaften, und wechseln Sie zur Registerkarte HTTP-Header. Die meisten X-Header können hier gefunden und entfernt werden. Dies kann für einzelne Sites oder für den gesamten Server geschehen (ändern Sie die Eigenschaften für das Web Sites-Objekt in der Baumstruktur).

Für den Server-Header können Sie auf IIS6 Microsoft verwenden URLScan Werkzeug, um das zu entfernen. Port 80 Software macht auch ein Produkt namens Servermaske das wird sich darum kümmern und noch viel mehr für dich.

Für IIS7 gibt es a großartiger Artikel Verwenden eines benutzerdefinierten Moduls zum Ändern der Server-Kopfzeile.

Für den MVC-Header in Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

32
2018-06-12 16:37



Akzeptierte Antwort, ich wünschte, ich könnte die Antwort mit @squillman teilen. Web.config zur Behebung der X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader = "false" /> </system.web> - Bryan Rehbein
Das Entfernen des X-Headers bringt dies in meine web.config, also sparen Sie sich etwas Zeit: <system.webServer> <httpProtocol> <customHeaders> <remove name = "X-Powered-By" /> </ customHeaders> </ httpProtocol> </system.webServer> - Broam
Broam, das ist die richtige Antwort ... für IIS7. Die Frage betrifft IIS6. Das hat keine Auswirkungen auf IIS6. - Anthony


Um alle benutzerdefinierten Header zu entfernen, die zu viele Informationen offen legen, sind die Methoden für IIS 7 (leider) vielfältig:

Kopfzeilenname: X-Powered-By

Hinzufügen:

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

in dem <system.webServer> Sektion.

Kopfzeilenname: Server

Implementieren Sie ein httpModule, das diesen Header entfernt, indem Sie Response.Headers.Remove ("Server") vom PreSendRequestHeaders-Ereignis aufrufen. Eine weitere Ressource hierfür: Cloaking Ihrer ASP.NET MVC-Webanwendung auf IIS 7

Kopfzeilenname: X-AspNet-Version

Im Abschnitt httpRuntime von web.config - set:

<httpRuntime enableVersionHeader="false" />

Kopfzeilenname: X-AspNetMvc-Version

Führen Sie aus dem Application_Start-Ereignis in global.asax den folgenden Code (C #) aus:

MvcHandler.DisableMvcResponseHeader = true;

54
2018-06-14 16:58



Ich möchte nur etwas präzisieren: Die meisten dieser Tricks funktionieren nur mit IIS> = 7 im integrierten Pipeline-Modus. Im klassischen Modus wird im besten Fall nichts unternommen (<remove> Zeilen in web.config) oder eine Exception ausgelöst (direkte Aufrufe von Response.Headers in global.asax, was eine andere Lösung zum Entfernen von Headern darstellt). Ich arbeite an einer Website im klassischen Modus und konnte diese Header leider nicht entfernen. - AFract


Wenn Sie dies in die Datei web.config einer ASP.NET-Anwendung einfügen, wird der Header der X-AspNet-Version gelöscht:

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

Beachten Sie, dass das system.web-Tag bereits in der Datei vorhanden sein sollte. Erstellen Sie kein Duplikat, fügen Sie einfach das httpRuntime-Tag hinzu. Das httpRuntime-Tag ist möglicherweise bereits vorhanden. Wenn ja, füge einfach das Attribut hinzu oder setze seinen Wert, wenn es schon da ist.


16
2018-06-12 16:43



Dies bleibt jedoch der Header "powered by". - UpTheCreek
aber wenn ich diesen Zeilencode in den system.web Meine Website geht unter. weißt du, warum? - neda Derakhshesh


Ich habe gerade den "Härtungs" -Zyklus meines aktuellen Projekts durchlaufen - Ich habe über den Ansatz gebloggt, der ein HTTP-Modul zum Entfernen der folgenden Header enthält:

Server,
X-AspNet-Version,
X-AspNetMvc-Version,
X-Powered-By

Relevante Stücke, die unten wiedergegeben werden:

Aber es gibt keine einfache Möglichkeit, den Server-Antwortheader über die Konfiguration zu entfernen. Glücklicherweise verfügt IIS7 über eine verwaltete, steckbare Modulinfrastruktur, mit der Sie die Funktionalität problemlos erweitern können. Im Folgenden finden Sie die Quelle für ein HttpModule zum Entfernen einer angegebenen Liste von HTTP-Antwortheadern:

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));
        }
    }
}

Stellen Sie sicher, dass Sie die Assembly signieren. Anschließend können Sie sie im GAC Ihres Webservers installieren und einfach die folgende Datei in der web.config der Anwendung (oder wenn sie global angewendet werden soll) in der Datei machine.config ändern:

<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



Unterdrücken Sie die Generierung der Header nach Konfiguration scheint viel mehr Sinn als die Header erzeugt und dann zu entfernen. - realMarkusSchmidt
Scheint so, als ob dieser Link jetzt tot ist. :-( - Danny Schoemann


Ich benutze folgenden Code und arbeite für mich 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



Was ist mit Ihren Bildern und Inhalten, die nicht durch die Code-Pipeline gehen? - Mark Sowul
Was hast du in den "Server" gesteckt? sollte es so sein? Response.Headers.Remove ("Server: Microsoft-IIS / 7.0"); ? oder es sollte Server sein? bitte hilfe - neda Derakhshesh
Ich habe nur "Server" nichts anderes gesetzt. Wenn Ihr Kopfzeilenname anders ist, können Sie es mit einem anderen Namen versuchen. - Nasir Mahmood


Prüfen dieser Blog. Verwenden Sie keinen Code zum Entfernen von Antwortheadern. Es ist instabil gemäß Microsoft

Verwenden Sie stattdessen den Abschnitt Benutzerdefinierte Header von 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