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


Ich muss entfernen übermäßige Header (in erster Linie um Penetrationstests zu bestehen). Ich habe meine Zeit damit verbracht, nach Lösungen zu suchen, die das Ausführen von UrlScan beinhalten, aber diese sind umständlich UrlScan muss bei jedem Start einer Azure-Instanz installiert werden.

Es muss eine gute Lösung für Azure geben, bei der Installationsprogramme von startup.cmd nicht bereitgestellt werden.

Ich verstehe, dass die Antwortheader hinzugefügt werden verschiedene Orte:

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

Gibt es irgendeine Möglichkeit (über web.config usw. zu konfigurieren), IIS7 zu entfernen / verstecken / deaktivieren Sie die HTTP-Antwort-Header, um die Warnung "Excessive Headers" zu vermeiden asafaweb.com, ohne ein IIS-Modul zu erstellen oder Installationsprogramme bereitzustellen, die bei jedem Start einer Azure-Instanz ausgeführt werden müssen?


76
2017-10-09 16:01


Ursprung


Antworten:


Mit den folgenden Änderungen können Sie diese HTTP-Antwortheader in Azure entfernen ohne ein benutzerdefiniertes HttpModule schreiben.

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

Zu entfernen Server, gehen Sie zu Global.asax, finden / erstellen Sie die Application_PreSendRequestHeaders Ereignis und füge folgendes hinzu: BK und dieser Blog Dies wird auch bei Cassini / local dev nicht fehlschlagen:

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

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

Zu entfernen X-AspNet-Version, in der web.config finden / erstellen <system.web> und füge hinzu:

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

    ...

Zu entfernen X-AspNetMvc-Version, gehen Sie zu Global.asax, finden / erstellen Sie die Application_Start Ereignis und fügen Sie eine Zeile wie folgt hinzu:

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

Zu entfernen X-Powered-By, in der web.config finden / erstellen <system.webServer> und füge hinzu:

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

    ...

132
2017-10-09 16:01



MSDN veröffentlicht Dieser Artikel wie man Header auf Azure-Websites versteckt. Sie können den Server jetzt aus web.config ausblenden, indem Sie einen Eintrag zu system.webServer hinzufügen

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

VS wird das oben genannte als ungültig betrachten. Der obige Link hat Code als Bilder, schwer zu finden. Die MVC-Version ist beim Start der Anwendung immer noch wie oben beschrieben verborgen, gleiches gilt für x-powered-by und .Net-Version.


10
2018-01-11 16:39



Es gibt auch ein Paket auf NuGet, das Ihnen hilft, dies durch ein paar Zeilen Konfiguration und keine Änderungen am Code zu erreichen: NWebsec. Die Dokumentation zum Entfernen von Versionsheadern finden Sie hier: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Es ist hier demonstriert: http://www.nwebsec.com/HttpHeaders/VersionHeaders (in Azure)

Haftungsausschluss: Ich bin der Entwickler des Projekts.


6
2017-10-09 19:29



Die vorherigen Antworten von @ giveme5minutes und @AKhooli, die sich auf Azure-Websites beziehen, sowie einige andere Elemente, die der Scanner sehen möchte, werden aktualisiert. Dies sind die Änderungen, die ich vorgenommen habe, um ASafaWeb mit einer Azure-Website zufriedenzustellen.

Es beschwert sich immer noch darüber, dass der Azure Affinity Header-Cookie nicht nur https ist, sondern Affinität ist der Typ von Cookie, den Sie sowieso 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
2018-01-24 04:07



Nick Evans 'Antwort ist perfekt, aber ...

Wenn Sie diese Header für a entfernen Sicherheit Zweck, vergiss nicht, das zu ändern ASP.NET Session coockie name ! Weil 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: (Seien Sie kreativ)

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

2
2017-07-11 22:06