it-swarm.com.de

Serverheader aus statischem Inhalt entfernen in IIS 7/8

Als Teil der Bemühungen, die API und die Website sicherer zu machen, entferne ich Header, die Informationen über die Ausführung der Website enthalten.

Beispiel vor dem Strippen von Headern:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687

Web.config:

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

Global.asax.cs:

protected void Application_PreSendRequestHeaders() {
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
    Response.AddHeader("Strict-Transport-Security", "max-age=300");
    Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
}

Und danach geben alle Aufrufe der Site und der API sicherere Header zurück, wie z.

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687

So weit, ist es gut. In Firebug habe ich jedoch festgestellt, dass der statische Inhalt (zum Beispiel loading.gif) immer noch den Serverheader enthält.

HTTP/1.1 304 Not Modified
Cache-Control: no-cache
Accept-Ranges: bytes
Etag: "a3f2a35bdf45ce1:0"
Server: Microsoft-IIS/8.0
Date: Tue, 25 Jun 2013 18:33:16 GMT

Ich gehe davon aus, dass dies irgendwie von IIS gehandhabt wird, aber ich kann nirgendwo etwas finden, um diesen Header zu entfernen. Ich habe versucht, Folgendes hinzuzufügen:

<remove name="Server" /> 

zu dem httpProtocol/customHeaders-Abschnitt in Web.config, wie oben erwähnt. Ich habe auch versucht, in den Abschnitt "HTTP Response Header" des IIS - Managers zu gehen und ein falsches Name/Wert-Paar für den Server-Header hinzuzufügen. In beiden Fällen kehrt es immer noch zurück

Server: Microsoft-IIS/8.0

beim Laden von Bildern, CSS oder JS. Wo/Was muss ich einstellen, um das Problem zu beheben?

25
Chris Doggett

Sie sollten in der Lage sein, alle Anforderungen zu zwingen, Ihren verwalteten Code zu durchlaufen, indem Sie dies zu Ihrer Webkonfiguration hinzufügen:

<modules runAllManagedModulesForAllRequests="true">

Dann sollten auch statische Dateien Ihren Header-Regeln entsprechen.

4
Bill Gregg

Auf dieselbe Weise wie in diese Antwort und in diese Website: sollten Sie die folgenden Schritte ausführen: 

C #:

namespace MvcExtensions.Infrastructure
{
    public class CustomServerName : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        public void Dispose() { }

        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

Web.config:

<system.webServer>
   <modules>
      <add name="CustomHeaderModule" type="MvcExtensions.Infrastructure.CustomServerName" />
   </modules>
</system.webServer>
11
Gabriel

Leider funktionieren verwaltete Codemodule nur für den Code, der die ASP.NET-Pipeline durchläuft, während andere zu Recht vorgeschlagen haben, dass alle Anforderungen durch verwalteten Code erzwungen werden können. 

Um Header aus allen Anforderungen zu entfernen, einschließlich statischer Inhalte, die standardmäßig direkt und nicht über verwalteten Code bereitgestellt werden, ist es möglich, ein Native-Code-Modul zu verwenden. Leider sind Native-Code-Module etwas schwieriger zu schreiben, da sie die win32-APIs anstelle von ASP.NET verwenden. Meiner Erfahrung nach eignen sie sich jedoch viel eher zum Entfernen von Headern. 

Der folgende Link enthält Binaries und Quellcode für ein Native-Code-Modul, mit dem Header entfernt werden können. Es ist keine zusätzliche Konfiguration erforderlich, um die "Server" -Header zu entfernen. Andere zu entfernende Header können jedoch in der Konfiguration IIS hinzugefügt werden.

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

7
ph1ll

Der einzige, für den es keine einfache Lösung gab, war der "Server" -Header. Ich konnte es lokal in IIS und auf einer Azure-Website entfernen, indem ich dies in der web.config hinzufügte

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

Verwenden Sie die Option IIS UrlRewrite 2.0, um den Server-Antwortheader zu löschen. Fügen Sie der Datei Web.config folgenden Code hinzu

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

https://stackoverflow.com/a/12615970/5810078

2
Aathira

Keine der Lösungen hier hat für mich richtig funktioniert.

Meine einfache Lösung bestand darin, dies meiner web.config-Datei hinzuzufügen:

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