Entfernen Sie den Server Response Header IIS7

107

Gibt es eine Möglichkeit, den Antwortheader "Server" aus IIS7 zu entfernen? Es gibt einige Artikel, die zeigen, dass wir mit HttpModules dasselbe erreichen können. Dies ist hilfreich, wenn wir kein Administratorrecht für den Server haben. Außerdem möchte ich keinen ISAPI-Filter schreiben.

Ich habe Administratorrechte für meinen Server. Also möchte ich die oben genannten Sachen nicht machen. Bitte helfen Sie mir, dasselbe zu tun.

user247702
quelle

Antworten:

111

Fügen Sie dies Ihrer global.asax.cs hinzu:

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}
bkaid
quelle
11
Ich weiß nicht, warum die Antwort des http-Moduls höher ist als diese, diese ist viel einfacher
jjxtra
2
Sie könnten feststellen, dass Sie eine NullReferenceExceptionin Cassini bekommen, wenn Sie sich darauf verlassen HttpContext.Current. Dieser Blog-Beitrag zeigt, wie Sie dies tun können, ohne die Cassini-Unterstützung zu unterbrechen, wenn dies für Sie wichtig ist.
Owen Blacker
49
@ PsychoDad dies funktioniert nur für ASP.NET-Anfragen, nicht für statische Dateien wie .css und .js
Max Toro
1
Um den MVC-Header zu entfernen, können Sie Folgendes tun: MvcHandler.DisableMvcResponseHeader = true;
ProVega
7
Es ist keine gute Idee, das PreSendRequestHeadersin einer Klasse zu verwenden, die IHttpModuleoder implementiert Global.asax. Ich habe gesehen, wie das Ereignis die App auf dem Server unter Stress einfrierte. Das BeginRequestEreignis sollte funktionieren, um Änderungen am Antwortheader vorzunehmen. Siehe hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .
Dmitry S.
77

In IIS7 müssen Sie ein HTTP-Modul verwenden. Erstellen Sie Folgendes als Klassenbibliothek in VS:

namespace StrongNamespace.HttpModules
{
  public class CustomHeaderModule : IHttpModule
  { 
    public void Init(HttpApplication context)
    {
      context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    } 

    public void Dispose() { } 

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
      HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts");
    }
  }
}

Fügen Sie dann Folgendes zu Ihrer web.config hinzu, oder konfigurieren Sie sie in IIS (wenn Sie in IIS konfigurieren, muss sich die Assembly im GAC befinden).

<configuration>
  <system.webServer>
    <modules>
      <add name="CustomHeaderModule"
       type="StrongNamespace.HttpModules.CustomHeaderModule" />
    </modules>
  </system.webServer>
</configuration>
lukiffer
quelle
Hervorragend, ich kann dies auch optimieren, um den ETag-Header in meiner Serverfarm zu entfernen.
Devstuff
Dies verursacht einen Laufzeitfehler in casini ... / ASP.NET Dev Server
UpTheCreek
2
@UpTheCreek Der ASP.Net-Entwicklungsserver (Cassini) mag diesen Code nicht. Dieser Blog-Beitrag hat jedoch eine Lösung dafür - Sie müssen überprüfen, ob das HttpApplication, das HttpRequest, das HttpContextund das HttpResponsenicht der nullFall ist und ob dies der Fall HttpRequest.IsLocalist false.
Owen Blacker
2
Wie die Überschrift in der Modifizierung PreSendRequestHeaderskönnte Probleme mit HttpCacheModule verursachen , sollten Sie so etwas wie verwenden PostReleaseRequestStatestatt.
Eirik H
5
Das Modul wird nicht aufgerufen, wenn IIS den 304 Not Modified-Header für statische Dateien (css / less / images / etc) sendet, da dieser die ASP.NET-Pipeline nicht erreicht. In dieser Situation wird Server: Microsoft IIS / 7.5 weiterhin gerendert
Jano
42

Wenn das URL Rewrite Module Version 2.0 für IIS (UrlRewrite) aktiviert ist, fügen Sie im Konfigurationsabschnitt <configuration><system.webServer><rewrite>die ausgehende Regel hinzu:

<outboundRules>
  <rule name="Remove RESPONSE_Server" >
    <match serverVariable="RESPONSE_Server" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>
JeffZhnn
quelle
11
Beachten Sie, dass dadurch nur der Server-Header gelöscht und nicht entfernt wird.
Nick Evans
Entschuldigung für die Unwissenheit, aber zu welchem ​​Teil sollte ich das hinzufügen ?! Ich habe versucht, es in <system.webServer>
Vignesh Subramanian
1
Vielen Dank! Funktioniert in IIS 8.5, das ist so einfach. Ich habe keinen Texteditor, aber Sie können die GUI einfach verwenden. Der Name sollte RESPONSE_Server sein, nicht nur Server (hier habe ich zuerst versagt).
Louis Matthijssen
Dies ist gut genug, wenn Sie eine Nicht-ASP.Net-Anwendung dafür haben. Sie können den Server-Header mit den genannten Codes nicht entfernen
mhesabi
4
@vignesh Dies sind einige UrlRewrite-Konfigurationsunterknoten. Sie müssen sie unter einen rewriteKnoten in setzen system.webServer. Beachten Sie, dass Ihre Site dadurch abstürzt, wenn UrlRewrite nicht auf dem Server installiert ist. Verwenden Sie zuerst die IIS-Konfigurationskonsole, um zu überprüfen, wie diese Konfigurationsknoten notiert werden.
Frédéric
36

Scott Mitchell bietet in einem Blogbeitrag Lösungen zum Entfernen unnötiger Header .

Wie bereits in anderen Antworten erwähnt, gibt es für den ServerHeader die http- Modullösung oder eine web.config-Lösung für IIS 10+ , oder Sie können stattdessen URLRewrite verwenden, um sie auszublenden .

Die praktischste Lösung für ein aktuelles Setup (IIS 10 +) ist die Verwendung removeServerHeaderin der Datei web.config:

<system.webServer>
  ...
  <security>
    <requestFiltering removeServerHeader="true" />
  </security>
  ...
</system.webServer>

Für X-AspNet-Versionund X-AspNetMvc-Versionbietet er einen besseren Weg, als sie bei jeder Antwort zu entfernen: sie einfach überhaupt nicht zu generieren.

Verwenden enableVersionHeaderzum Sperren X-AspNet-Version, in web.config

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

Verwenden Sie MvcHandler.DisableMvcResponseHeaderin Fall .Net Application_Start zum SperrenX-AspNetMvc-Version

MvcHandler.DisableMvcResponseHeader = true;

Entfernen Sie schließlich in der IIS-Konfiguration den X-Powered-Bybenutzerdefinierten Header in web.config.

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

Beachten Sie, dass bei ARR (Application Request Routing) auch ein eigenes ARR hinzugefügt wird X-Powered-By, das durch benutzerdefinierte Header-Einstellungen nicht entfernt wird. Dieser muss über den IIS-Manager, Editor-Konfiguration im IIS-Stammverzeichnis (nicht auf einer Site) entfernt werden: Gehen Sie zum system.webServer/proxyKnoten und setzen Sie arrResponseHeaderauf false. Nach einem IISResetwird es berücksichtigt.
(Ich habe diesen hier gefunden , außer dass es in diesem Beitrag um die alte IIS 6.0-Methode zum Konfigurieren von Dingen geht.)

Vergessen Sie nicht, dass die Lösung nach Anwendungscode nicht standardmäßig für Header gilt, die für statischen Inhalt generiert wurden (Sie können das aktivieren, runAllManagedModulesForAllRequestsum dies zu ändern, aber alle Anforderungen werden ausgeführt .Net-Pipeline). Dies ist kein Problem, X-AspNetMvc-Versionda es nicht zu statischen Inhalten hinzugefügt wird (zumindest wenn statische Anforderungen nicht in der .Net-Pipeline ausgeführt werden).

Randnotiz: Wenn das Ziel darin besteht, die verwendete Technologie zu verschleiern , sollten Sie auch die Standardnamen für .NET-Cookies ändern ( .ASPXAUTHwenn die Formularauthentifizierung aktiviert ist ( nameAttribut für formsTag in web.config verwenden) ASP.NET_SessionId( <sessionState cookieName="yourName" />in web.config unter system.webTag verwenden) __RequestVerificationToken(ändern) per Code mit AntiForgeryConfig.CookieName, gilt aber leider nicht für die versteckte Eingabe, die dieses System im HTML generiert)).

Frédéric
quelle
18

Tatsächlich funktionieren die oben gezeigten codierten Module und die Global.asax-Beispiele nur für gültige Anforderungen.

Wenn Sie beispielsweise am Ende Ihrer URL <hinzufügen, wird eine Seite "Ungültige Anforderung" angezeigt, auf der der Server-Header weiterhin angezeigt wird. Viele Entwickler übersehen dies.

Die angezeigten Registrierungseinstellungen funktionieren ebenfalls nicht. URLScan ist die EINZIGE Möglichkeit, den "Server" -Header zu entfernen (zumindest in IIS 7.5).

Dan Ware
quelle
Es funktioniert für mich mit dem codierten Modul (in web.config hinzugefügt) auch bei einer schlechten Anfrage;) In global.asax funktioniert es nicht wirklich (z. B. statische Dateien usw.)
kapsiR
Hoffen wir, dass Sie die Anforderungsüberprüfung noch aktiviert haben.
Dan Ware
1
Hat jemand eine Alternative zu urlscan für IIS 8+?
Herostwist
Zumindest in IIS10 + gibt es eine funktionierende Lösung: stackoverflow.com/a/53222967/1671558
Ilya Chernomordik
16

Oder fügen Sie in web.config hinzu:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-AspNet-Version" />
            <remove name="X-AspNetMvc-Version" />
            <remove name="X-Powered-By" />
            <!-- <remove name="Server" />  this one doesn't work -->
        </customHeaders>
    </httpProtocol>
</system.webServer>
Anders
quelle
3
Diese Methode entfernt den 'Server'-Header nicht. Die anderen werden entfernt.
Pure.Krome
Sie können das X-Powered-By in der Konfiguration der Antwortheader auf Serverebene entfernen.
Snowburnt
1
Ich weiß nicht , ob es ein Fall ist , wo diese Art und Weise entfernt X-AspNet-Versionund X-AspNetMvc-VersionHeader. Was ich weiß ist, dass dieser Weg nicht immer funktioniert (falls er jemals funktioniert). Eine zuverlässigere Methode zum Entfernen finden Sie in der Antwort von @Frederic.
TheBlueSky
In IIS10 + gibt es jetzt eine Möglichkeit, den Server-Header zu entfernen: stackoverflow.com/a/53222946/1671558
Ilya Chernomordik
14

Mit diesem web.configSetup werden alle unnötigen Header aus der ASP.NET-Antwort entfernt (zumindest ab IIS 10):

<!--Removes version headers from response -->
<httpRuntime enableVersionHeader="false" />

<httpProtocol>
  <customHeaders>
    <!--Removes X-Powered-By header from response -->
    <clear />
  </customHeaders>
</httpProtocol>

<security>
  <!--Removes Server header from response-->
  <requestFiltering removeServerHeader ="true" />
</security>

Bitte beachten Sie, dass dadurch alle Header für die "Anwendung" ausgeblendet werden, ebenso wie alle anderen Ansätze. Wenn Sie beispielsweise eine Standardseite oder eine Fehlerseite erreichen, die vom IIS selbst oder von ASP.NET außerhalb Ihrer Anwendung generiert wurde, gelten diese Regeln nicht. Idealerweise sollten sie sich in IIS auf der Stammebene befinden, und diese Schwelle kann einige Fehlerreaktionen auf den IIS selbst hinterlassen.

PS In IIS 10 gibt es einen Fehler , durch den manchmal der Server-Header auch bei korrekter Konfiguration angezeigt wird. Es sollte jetzt behoben sein, aber IIS / Windows muss aktualisiert werden.

Ilya Chernomordik
quelle
12

Zusätzlich zur URL Rewrite-Antwort finden Sie hier das vollständige XML fürweb.config

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Remove RESPONSE_Server" >
        <match serverVariable="RESPONSE_Server" pattern=".+" />
        <action type="Rewrite" value="Company name" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

URL neu schreiben

Vaibhav Garg
quelle
Entfernt dies alle
IIS-
1
Das obige Update funktioniert korrekt für die Webseiten. Bei Bildern / Symbolen wird jedoch, wenn 500 Internal Server Error aufgetreten ist, der Server angezeigt: Microsoft-IIS / 7.5 anstelle des Werts. Können Sie mir bitte dabei helfen
ravithejag
11

Um den Server:Header zu entfernen , gehen Sie zu Global.asax, suchen / erstellen Sie das Application_PreSendRequestHeadersEreignis und fügen Sie eine Zeile wie folgt hinzu (dank BK und diesem Blog wird dies auch auf dem Cassini / lokalen Entwickler nicht fehlschlagen):

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    // Remove the "Server" HTTP Header from response
    HttpApplication app = sender as HttpApplication;
    if (null != app && null != app.Request && !app.Request.IsLocal &&
        null != app.Context && null != app.Context.Response)
    {
        NameValueCollection headers = app.Context.Response.Headers;
        if (null != headers)
        {
            headers.Remove("Server");
        }
    }
}

Wenn Sie eine vollständige Lösung zum Entfernen aller zugehörigen Header in Azure / IIS7 suchen und auch mit Cassini zusammenarbeiten möchten, lesen Sie diesen Link , der die beste Möglichkeit zum Deaktivieren dieser Header ohne Verwendung von HttpModules oder URLScan zeigt.

Nick Evans
quelle
9

Wenn Sie nur den Header entfernen möchten, können Sie eine verkürzte Version der Antwort von lukiffer verwenden:

using System.Web;

namespace Site
{
    public sealed class HideServerHeaderModule : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders +=
            (sender, e) => HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

Und dann in Web.config:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
  </modules>
</system.webServer>
Drew Noakes
quelle
1
Dies ist am besten geeignet, da Ressourcen wie css / js nicht über den Server-Header verfügen, ohne Konfiguration von Server zu Server portiert werden und der Server-Antwortheader nicht nur leer ist, sondern auch nicht gesendet wird.
Adam Caviness
Ich habe Kommentare gesehen, dass runAllManagedModulesForAllRequests = "true" Ihre App verlangsamt und nicht empfohlen wird. Stattdessen könnte man das urlrewrite-Modul outboundRules verwenden, um den Serverwert auch für statische Dateien zu löschen. britishdeveloper.co.uk/2010/06/…
Juri
5

Versuchen Sie, den HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeaderRegistrierungseintrag auf a REG_DWORDvon zu setzen 1.

Richard Deeming
quelle
Bei unserer Serverfarm ist eine seltsame Situation aufgetreten, in der diese Registrierungseinstellung die einzige Änderung zu sein scheint, die für alle von uns verwendeten Betriebssysteme (W2K8, W2K3) sowohl für IIS6 als auch für IIS7 funktioniert.
Jerhewet
2
Frustrierenderweise macht dies für mich keinen Unterschied, selbst nach dem Neustart der virtuellen Maschine. Wir führen IIS 7.5 unter Windows Server 2008 R2 Standard "Version 6.1 (Build 7601: Service Pack 1)" aus. Ebenso wird mein OnPreSendRequestHeadersEvent-Handler (siehe oben) aus irgendeinem Grund niemals ausgelöst.
Owen Blacker
3
Leider scheint der Registrierungsschlüssel unter IIS 7.5
Andrew Csontos am
4

UrlScan kann den Server-Header auch mithilfe von AlternateServerName=unter entfernen [options].

eddiegroves
quelle
2

Im Anschluss an eddiegroves' Antwort , je nach Version von URLScan, können Sie stattdessen lieber RemoveServerHeader=1unter [options].

Ich bin nicht sicher, in welcher Version von URLScan diese Option hinzugefügt wurde, aber sie war in Version 2.5 und höher verfügbar.

techtician
quelle
2

Ich habe einen Artikel gefunden, in dem erklärt wird, warum wir sowohl die Registrierung bearbeiten als auch ein Tool wie UrlScan verwenden müssen, um dies in IIS ordnungsgemäß einzurichten. Ich habe es auf unseren Servern verfolgt und es funktioniert: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Wenn Sie nur UrlScan verwenden, aber die Registrierungsänderung nicht vornehmen, gibt Ihr Server während des Stoppens des World Wide Publishing Service die http-Antwort des Servers aus der Datei HTTP.sys zurück. Außerdem finden Sie hier häufig auftretende Probleme bei der Verwendung des UrlScan-Tools: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008

Pawel
quelle
2
Bitte posten Sie Ihren Code auf Stack Overflow. Links können sich ändern und brechen, daher ist der Posting-Code viel hilfreicher
Blundering Philosopher
2

In IIS 10 verwenden wir eine ähnliche Lösung wie Drews Ansatz, dh:

using System;
using System.Web;

namespace Common.Web.Modules.Http
{
    /// <summary>
    /// Sets custom headers in all requests (e.g. "Server" header) or simply remove some.
    /// </summary>
    public class CustomHeaderModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        public void Dispose() { }

        /// <summary>
        /// Event handler that implements the desired behavior for the PreSendRequestHeaders event,
        /// that occurs just before ASP.NET sends HTTP headers to the client.
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            //HttpContext.Current.Response.Headers.Remove("Server");
            HttpContext.Current.Response.Headers.Set("Server", "MyServer");
        }
    }
}

Und fügen Sie natürlich einen Verweis auf diese DLL in Ihren Projekten und auch auf das Modul in den gewünschten Konfigurationen hinzu:

<system.webServer>
    <modules>
      <!--Use http module to remove/customize IIS "Server" header-->
      <add name="CustomHeaderModule" type="Common.Web.Modules.Http.CustomHeaderModule" />
    </modules>
</system.webServer>

WICHTIGER HINWEIS1: Für diese Lösung ist ein Anwendungspool als integriert festgelegt.

WICHTIGER HINWEIS2: Alle Antworten in der Web-App sind davon betroffen (CSS und JS enthalten).

xautau
quelle
1

Ich hatte dies untersucht und die URLRewrite-Methode funktioniert gut. Ich kann die Änderung anscheinend nirgendwo gut finden. Ich habe dies mit PowerShell v2 und höher kompatibel geschrieben und unter IIS 7.5 getestet.

# Add Allowed Server Variable
    Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"}
# Rule Name
    $ruleName = "Remove Server Response Header"
# Add outbound IIS Rewrite Rule
    Add-WebConfigurationProperty -pspath "iis:\" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing='False'}
#Set Properties of newly created outbound rule 
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "serverVariable" -value "RESPONSE_SERVER"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "pattern" -value ".*"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/action" -name "type" -value "Rewrite"
Bill M.
quelle
1

Sie können den folgenden Code in die Datei Global.asax.cs einfügen

    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
    }
Dharmendra Kumar Sharma
quelle
1

Die oben vorgeschlagene Lösung in Kombination hat bei mir mit folgenden Änderungen funktioniert. Hier poste ich mein Szenario und meine Lösung.

Für mich wollte ich folgende Header entfernen:

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

Ich habe diese zu meiner global.asax hinzugefügt:

<%@ Application Language="C#" %>
<script runat="server">
    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
        Response.Headers.Remove("X-Powered-By");
        Response.Headers.Remove("X-AspNet-Version");
        Response.Headers.Remove("X-AspNetMvc-Version");
    }
</script>

Das obige Ereignis wurde nicht ausgelöst, daher habe ich folgendes zu web.config hinzugefügt, dann hat es funktioniert.

<modules runAllManagedModulesForAllRequests="true" />

und zum Entfernen des Versionsheaders habe ich auch folgendes zu web.config hinzugefügt:

<httpRuntime enableVersionHeader="false" />

Änderungen in web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
    </system.webServer>
    <system.web>
        <httpRuntime enableVersionHeader="false" />
    </system.web>
</configuration>

Ich hoffe es hilft!

Zaki Mohammed
quelle
0

Ich habe all das hier und auf mehreren anderen ähnlichen Stapelüberlauf-Threads ausprobiert.

Ich wurde für eine Weile aufgehängt, weil ich vergessen habe, meinen Browser-Cache zu leeren, nachdem ich Konfigurationsänderungen vorgenommen hatte. Wenn Sie dies nicht tun und sich die Datei in Ihrem lokalen Cache befindet, wird sie Ihnen mit den ursprünglichen Headern (duh) zurückgegeben.

Ich habe es hauptsächlich durch Entfernen der runAllManagedModulesForAllRequests zum Laufen gebracht:

<modules runAllManagedModulesForAllRequests="true">

Dadurch wurden die überflüssigen Header von den meisten entfernt statischen Dateien entfernt, aber ich habe immer noch den "Server" -Header für einige statische Dateien in meinem WebAPI-Projekt in swagger erhalten.

Ich habe diese Lösung endlich gefunden und angewendet und jetzt alle unerwünschten Header verschwunden:

https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

welches seinen Code bespricht, der hier ist:

https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5

Dies ist ein Native-Code-Modul. Es ist in der Lage , den Server-Header zu entfernen und nicht nur den Wert auszublenden. Standardmäßig werden entfernt:

  • Server
  • X-Powered-By
  • X-Aspnet-Version
  • Server: Microsoft-HTTPAPI / 2.0 - wird zurückgegeben, wenn "die Anforderung nicht an IIS übergeben werden kann".
TechSavvySam
quelle
-1

In IIS 7.5 und möglicherweise neueren Versionen ist der Kopfzeilentext gespeichert iiscore.dll

Suchen Sie mit einem Hex-Editor die Zeichenfolge und das Wort "Server" 53 65 72 76 65 72danach und ersetzen Sie diese durch Null-Bytes. In IIS 7.5 sieht es so aus:

4D 69 63 72 6F 73 6F 66 74 2D 49 49 53 2F 37 2E 35 00 00 00 53 65 72 76 65 72 

Im Gegensatz zu einigen anderen Methoden führt dies nicht zu einer Leistungsminderung. Der Header wird auch aus allen Anforderungen entfernt, auch aus internen Fehlern.

3dcdr
quelle