wake-up-neo.net

Entfernen Sie den Server Response Header IIS7

Gibt es eine Möglichkeit, den Antwortheader "Server" von IIS7 zu entfernen? Es gibt einige Artikel, die zeigen, dass wir mit HttpModules dasselbe erreichen können. Dies ist hilfreich, wenn wir kein Administratorrecht auf dem Server haben. Ich möchte auch keinen ISAPI-Filter schreiben.

Ich habe Administratorrechte für meinen Server. Also möchte ich das oben genannte nicht machen. Helfen Sie mir bitte, das Gleiche zu tun.

101
ram

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

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

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 der web.config dann Folgendes hinzu oder konfigurieren Sie es 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>
76
lukiffer

verwenden Sie den IIS UrlRewrite 2.0

<outboundRules>
  <rule name="Remove RESPONSE_Server" >
    <match serverVariable="RESPONSE_Server" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>
33
JeffZhnn

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

Wie bereits in anderen Antworten gesagt, gibt es für den Server-Header die http-Modullösung oder das UrlScan-Modul. (Das URLScan-Modul ist in IIS 7.5 nicht mehr verfügbar. Verwenden Sie stattdessen URLRewrite zum Ausblenden .)

Für X-AspNet-Version und X-AspNetMvc-Version bietet er einen besseren Weg, als sie bei jeder Antwort zu entfernen: Sie werden einfach nicht generiert.

Verwenden Sie enableVersionHeader, um X-AspNet-Version in der web.config zu deaktivieren

<httpRuntime enableVersionHeader="false" />

Verwenden Sie MvcHandler.DisableMvcResponseHeader im .Net Application_Start-Ereignis, um X-AspNetMvc-Version zu deaktivieren.

MvcHandler.DisableMvcResponseHeader = true;

Entfernen Sie schließlich in IIS Konfiguration den benutzerdefinierten X-Powered-By -Header. (Dies kann in web.config, configuration/system.webServer/httpProtocol/customHeaders/remove[name=X-Powered-By]) erfolgen.

Wenn Sie über ARR (Application Request Routing) verfügen, wird auch ein eigener X-Powered-By hinzugefügt, der nicht durch benutzerdefinierte Kopfzeileneinstellungen entfernt wird. Dieser muss über den IIS Manager, Editor-Konfiguration im IIS Stammverzeichnis (nicht auf einer Site) entfernt werden: Gehen Sie zum system.webServer/proxy-Knoten und setzen Sie arrResponseHeader auf false. Nach einem IISReset wird dies berücksichtigt.
(Ich habe diese hier gefunden, mit der Ausnahme, dass es in diesem Beitrag um alte IIS 6.0-Art der Konfiguration von Dingen geht.)

Vergessen Sie nicht, dass die Lösung nach Anwendungscode nicht standardmäßig auf Header angewendet wird, die für statischen Inhalt generiert werden (Sie können runAllManagedModulesForAllRequests für die Änderung aktivieren, dies bewirkt jedoch, dass alle .Net-Pipeline-Anforderungen ausgeführt werden). Für X-AspNetMvc-Version ist dies kein Problem, da es nicht zu statischen Inhalten hinzugefügt wird (zumindest wenn statische Anforderungen nicht in der .Net-Pipeline ausgeführt werden).

Randbemerkung: Wenn das Ziel ist, die verwendete Technologie zu verschleiern, sollten Sie auch die Standard-.Net-Cookie-Namen ändern (.ASPXAUTH, wenn Formulare auth aktiviert sind (verwenden Sie das Attribut name für das Tag forms in web.config), ASP.NET_SessionId ( Verwenden Sie <sessionState cookieName="yourName" /> in der web.config unter system.web-Tag), __RequestVerificationToken (ändern Sie den Code mit AntiForgeryConfig.CookieName), gilt jedoch nicht für die verborgenen Eingaben, die dieses System im System generiert html)).

26
Frédéric

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

Fügen Sie beispielsweise <am Ende Ihrer URL hinzu, und Sie erhalten eine Seite "Ungültige Anforderung", auf der der Serverheader 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).

18
Dan Ware

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>
13
Anders

Ergänzung zur URL Rewrite Antwort , hier ist die komplette XML für web.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 Rewrite

11
Vaibhav Garg

Um den Server:-Header zu entfernen, gehen Sie zu Global.asax, suchen/erstellen Sie das Application_PreSendRequestHeaders -Ereignis und fügen Sie wie folgt eine Zeile hinzu (danke an BK und dieses Blog dies wird auch beim Cassini/local dev 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 auf Azure/IIS7 benötigen und auch mit Cassini arbeiten, finden Sie weitere Informationen unter diesem Link . Diese Option zeigt, wie Sie diese Header am besten deaktivieren können, ohne HttpModules oder URLScan zu verwenden.

10
Nick Evans

Wenn Sie nur den Header entfernen möchten, können Sie eine gekürzte Version von lukiffers Antwort 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>
9
Drew Noakes

Versuchen Sie, den Registrierungseintrag HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader auf einen REG_DWORD von 1 zu setzen.

5
Richard Deeming

UrlScan kann den Serverheader auch entfernen, indem AlternateServerName= unter [options] verwendet wird.

4
eddiegroves

Dieses web.config-Setup entfernt alle unnötigen Header aus der ASP.NET-Antwort (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 hierdurch alle Header für die "Anwendung" ausgeblendet werden, wie auch alle anderen Ansätze. Wenn Sie z. eine Standardseite oder eine Fehlerseite erreichen, die von IIS selbst oder ASP.NET außerhalb Ihrer Anwendung generiert wird, gelten diese Regeln nicht. Idealerweise sollten sie sich in IIS auf der Wurzelebene befinden, und diese Schwelle kann einige Fehlerantworten auf IIS selbst hinterlassen.

P.S. Es gibt ein bug in IIS 10, durch das der Serverheader manchmal auch bei korrekter Konfiguration angezeigt wird. Es sollte jetzt behoben sein, aber IIS/Windows muss aktualisiert werden.

4

Nach der Antwort von eddiegroves können Sie je nach Version von URLScan stattdessen RemoveServerHeader=1 unter [options] vorziehen.

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.

2
techtician

Ich habe einen Artikel gefunden, in dem erklärt wird, warum wir sowohl die Registrierung bearbeiten müssen als auch ein Tool wie UrlScan verwenden müssen, um dies in IIS richtig 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, die Registrierung jedoch nicht ändern, gibt der Server während der Zeit, zu der Sie den World Wide Publishing Service beenden, eine Antwort vom Server an den Server http aus der Datei HTTP.sys zurück. Hier sind auch die häufigsten Probleme bei der Verwendung des UrlScan-Tools: http://msdn.Microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008

2
Pawel

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

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 natürlich fügen Sie einen Verweis auf diese DLL in Ihrem Projekt und auch auf das Modul in der gewünschten Konfiguration 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 muss ein Anwendungspool als integriert festgelegt sein.

WICHTIGER HINWEIS2: Alle Antworten innerhalb der Web-App sind davon betroffen (einschließlich css und js).

2
xautau

Ich hatte das recherchiert und die URLRewrite-Methode funktioniert gut. Die Änderung kann anscheinend nirgends gut gefunden werden. 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"
0
Bill M

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

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

Ich habe es meistens funktioniert durch Entfernen die runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true">

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

Endlich habe ich diese Lösung gefunden und angewendet und jetzt sind alle unerwünschten Header weg:

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

das bespricht seinen Code, 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.
0
TechSavvySam

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

    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
    }