wake-up-neo.com

Entfernen / Ausblenden / Deaktivieren übermäßiger HTTP-Antwortheader in Azure / IIS7 ohne UrlScan

Ich muss übermäßige Header entfernen (in erster Linie, um Penetrationstests zu bestehen). Ich habe lange nach Lösungen gesucht, bei denen UrlScan ausgeführt wird. Diese sind jedoch umständlich, da UrlScan bei jedem Start einer Azure-Instanz installiert werden muss .

Für Azure muss es eine gute Lösung geben, bei der keine Installationsprogramme über startup.cmd bereitgestellt werden.

Ich verstehe, dass die Antwortheader an verschiedenen Stellen hinzugefügt werden :

  • Server : von IIS hinzugefügt.
  • X-AspNet-Version : Wird von System.Web.dll zum Zeitpunkt des Flushs in der HttpResponse-Klasse hinzugefügt
  • X-AspNetMvc-Version : Hinzugefügt von MvcHandler in System.Web.dll.
  • X-Powered-By : von IIS hinzugefügt

Gibt es eine Möglichkeit, IIS7 (über web.config usw.) so zu konfigurieren, dass die HTTP-Antwortheader entfernt/ausgeblendet/deaktiviert werden, um die Warnung "Übermäßige Header" bei asafaweb.com zu vermeiden, ohne sie zu erstellen Ein IIS -Modul oder Bereitstellen von Installationsprogrammen, die bei jedem Start einer Azure-Instanz ausgeführt werden müssen?

80
Nick Evans

Mit den folgenden Änderungen können Sie diese HTTP-Antwortheader in Azure entfernen: ohne Schreiben eines benutzerdefinierten HTTP-Moduls.

Die meisten Informationen im Internet sind veraltet und beziehen sich auf UrlScan (das inzwischen in IIS7 integriert wurde, aber mit dem RemoveServerHeader=1 Option entfernt). Unten ist die sauberste Lösung, die ich gefunden habe (danke an dieses Blog , diese Antwort und dieses Blog kombiniert).

Um den Server zu entfernen, gehen Sie zu Global.asax, suchen/erstellen Sie das Application_PreSendRequestHeaders event und füge folgendes hinzu (danke an BK und dieses Blog dies wird auch auf Cassini/local dev nicht scheitern):

Bearbeitet im April 2014: Sie können die Ereignisse PreSendRequestHeaders und PreSendRequestContext mit systemeigenen Modulen IIS= verwenden, aber nicht mit verwalteten Modulen, die IHttpModule implementieren. Das Festlegen dieser Eigenschaften kann zu Problemen mit asynchronous führen Anfragen . Die richtige Version ist BeginRequest-Ereignis zu verwenden.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

Um die X-AspNet-Version zu entfernen, suchen/erstellen Sie in der web.config <system.web> und füge hinzu:

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

    ...

Um die X-AspNetMvc-Version zu entfernen, gehen Sie zu Global.asax, suchen/erstellen Sie das Application_Start event und füge eine Zeile wie folgt hinzu:

  protected void Application_Start()
  {
      MvcHandler.DisableMvcResponseHeader = true;
  }

Um X-Powered-By zu entfernen, suchen/erstellen Sie in der web.config <system.webServer> und füge hinzu:

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

    ...
135
Nick Evans

MSDN hat diesen Artikel zum Ausblenden von Headern auf Azure-Websites veröffentlicht. Sie können den Server jetzt vor web.config verbergen, indem Sie einen Eintrag zu system.webServer hinzufügen

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

VS runzelt jedoch die Stirn als ungültig. Der obige Link hat Code als Bilder, schwer zu finden. Die MVC-Version ist beim Start der Anwendung weiterhin wie oben beschrieben ausgeblendet. Dies gilt auch für die x-powered-by- und die .Net-Version.

10
AKhooli

Es gibt auch ein Paket auf NuGet, mit dem Sie dies durch ein paar Konfigurationszeilen und ohne Änderungen am Code erreichen können: NWebsec. Die Dokumentation zum Entfernen von Versionsheadern finden Sie hier: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Es wird hier vorgeführt: http://www.nwebsec.com/HttpHeaders/VersionHeaders (in Azure)

Haftungsausschluss: Ich bin der Entwickler des Projekts.

6
klings

Die Antwort von Nick Evans ist perfekt, aber ...

Wenn Sie diese Header aus Sicherheitsgründen entfernen, vergessen Sie nicht, das ASP.NET Session coockie name! Da es einfacher ist, die verwendete Sprache oder die Serverversion zu erraten, wenn Sie dies sehen:

enter image description here

So ändern Sie den Cookie-Namen: (kreativ sein)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>

Die vorherigen Antworten von @ giveme5minutes und @AKhooli in Bezug auf Azure-Websites sowie einige andere Elemente, die der Scanner anzeigen möchte, wurden zusammengefasst. Dies sind die Änderungen, die ich vorgenommen habe, um ASafaWeb mit einer Azure-Website zufrieden zu stellen.

Es wird immer noch darüber geklagt, dass das Azure-Affinitätsheader-Cookie nicht nur https ist, sondern dass Affinität die Art von Cookie ist, die Sie trotzdem wiedergeben möchten, oder?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>
3