Pytanie Usuwanie / ukrywanie / wyłączanie nadmiernych nagłówków odpowiedzi HTTP w Azure / IIS7 bez UrlScan


Muszę usunąć nadmierne nagłówki (głównie do testów penetracyjnych). Spędziłem czas na szukaniu rozwiązań, które wymagają uruchomienia UrlScan, ale są one uciążliwe, ponieważ Program UrlScan należy zainstalować przy każdym uruchomieniu instancji Azure.

Na platformie Azure musi istnieć dobre rozwiązanie, które nie wymaga instalowania instalatorów z pliku startup.cmd.

Rozumiem, że nagłówki odpowiedzi zostały dodane różne miejsca:

  • serwer: dodane przez IIS.
  • Wersja X-AspNet: dodane przez System.Web.dll w czasie Flush w klasie HttpResponse
  • Wersja X-AspNetMvc: Dodano przez MvcHandler w System.Web.dll.
  • X-Powered-By: dodane przez IIS

Czy istnieje sposób konfigurowania (przez web.config itp.?) IIS7 do usuwania / ukrywania / wyłączania nagłówków odpowiedzi HTTP, aby uniknąć ostrzeżenia "Nadmierne nagłówki" na stronie asafaweb.com, bez tworzenia modułu IIS ani instalowania instalatorów, które muszą być uruchamiane za każdym razem, gdy uruchamia się instancja Azure?


76
2017-10-09 16:01


pochodzenie




Odpowiedzi:


Poniższe zmiany umożliwiają usunięcie nagłówków odpowiedzi HTTP na platformie Azure bez pisanie niestandardowego HttpModule.

Większość informacji w sieci jest nieaktualna i obejmuje program UrlScan (który został zintegrowany z IIS7, ale z RemoveServerHeader=1 opcja usunięta). Poniżej znajduje się najmodniejsze rozwiązanie, które znalazłem (dzięki ten blog, ta odpowiedź, i ten blog łączny).

Usuwać serwer, przejdź do Global.asax, znajdź / utwórz Application_PreSendRequestHeaders wydarzenie i dodaj następujące elementy (dzięki BK i ten blog to również nie zawiedzie w Cassini / lokalnym dev):

Edytowane Kwiecień 2014: Możesz używać zdarzeń PreSendRequestHeaders i PreSendRequestContext z natywnymi modułami IIS, ale nie używaj ich z zarządzanymi modułami, które implementują IHttpModule. Ustawienie tych właściwości może powodować problemy z żądania asynchroniczne. Poprawną wersją jest użycie zdarzenia BeginRequest.

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

Usuwać Wersja X-AspNet, w web.config znajdź / utwórz <system.web> i dodaj:

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

    ...

Usuwać Wersja X-AspNetMvc, przejdź do Global.asax, znajdź / utwórz Application_Start wydarzenie i dodaj wiersz w następujący sposób:

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

Usuwać X-Powered-By, w web.config znajdź / utwórz <system.webServer> i dodaj:

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

    ...

132
2017-10-09 16:01



wspaniała odpowiedź - dzięki - dunnry
W przypadku korzystania z IIS nie Azure należy pamiętać, że pula aplikacji musi być w trybie zintegrowanym. I .IsLocal powinno zostać usunięte podczas debugowania lokalnie. - IvanH
Nie ma potrzeby "warunków Yoda" w C # - nie pozwala na przypisanie warunkowe, en.wikipedia.org/wiki/Yoda_Conditions - tvanfosson
Dziękuję za odpowiedź szczegółową, jednak starałem się postępować zgodnie z instrukcjami, ale za każdym razem, gdy skanowałem stronę za pomocą asafweb, wciąż wspomina się o problemie z nadmiernym nagłówkiem (wersja X-AspNet). Użyłem nawet URLRewrite, aby usunąć ten nagłówek. Czy są jakieś inne możliwości jej usunięcia? - Raymond A
Nadal występuje problem z żądaniem nieistniejącego pliku, np. "yoursite / foo.jpg "; Ponieważ to żądanie nie jest przetwarzane przez MVC, nadal będzie tam nagłówek odpowiedzi "Serwer: IIS x.y". Jednym z rozwiązań działającym w witrynach sieci Azure (i najwyraźniej TYLKO dla witryn internetowych w języku błękitnym) jest dodanie tego w <system.webServer>: <security xdt: Transform = "Insert"> <requestFiltering removeServerHeader = "true" /> </ security > - adrian h.


MSDN opublikowane Ten artykuł o tym, jak ukryć nagłówki w witrynach Azure. Teraz możesz ukryć serwer przed web.config, dodając wpis do system.webServer

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

VS będzie jednak źle widzieć powyższe jako nieprawidłowe. Powyższy link ma kod jako zdjęcia, trudne do znalezienia. Wersja MVC jest nadal ukryta w starcie aplikacji jak wyżej, tak samo dla wersji x-powered-by i .Net.


10
2018-01-11 16:39



To jest dokładnie czego szukałem. Dziękuję Ci. - Martin Costello
Może to działać na platformie Azure, ale nie w żadnym innym miejscu. Komentarze na temat tego artykułu to potwierdzają, podobnie jak moje własne testy. Odpowiedź @ giveme5minutes to sposób, który działa. - CrazyPyro
Byłoby miło wiedzieć, co zostało wprowadzone w celu wykonania tej funkcji: | Zwłaszcza, że ​​URL SCAN wcześniej zaimplementował to po wyjęciu z pudełka. - felickz


Jest też pakiet na NuGet, który pomaga osiągnąć to poprzez kilka linii konfiguracji i bez zmian w kodzie: NWebsec. Dokumenty dotyczące usuwania nagłówków wersji można znaleźć tutaj: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Jest tu demo: http://www.nwebsec.com/HttpHeaders/VersionHeaders (w Azure)

Zastrzeżenie: jestem deweloperem w projekcie.


6
2017-10-09 19:29



"NWebsec pomaga ci zlikwidować prawie wszystkie nagłówki wersji, tj. Wszystkie oprócz nagłówka Server: Microsoft-IIS / 8.0." :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers - felickz
Przeniósł się z codeplex do GitHub (proszę zaktualizować link github.com/NWebsec/NWebsec/wiki ) - Nordes


Wyciągając poprzednie odpowiedzi z @ giveme5minutes i @AKhooli, ponieważ odnoszą się one do witryn Azure plus kilka innych elementów, które skaner chce zobaczyć, są to zmiany, które wprowadziłem, aby uczynić ASafaWeb szczęśliwym z witryną Azure.

Nadal skarży się na to, że plik cookie nagłówka powinowactwa Azure nie jest tylko https, ale powinowactwo jest typem ciasteczka, które chcesz odtwarzać, tak?

<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





Odpowiedź Nicka Evansa jest idealna, ale ...

Jeśli usuniesz te nagłówki dla a bezpieczeństwo cel, nie zapomnij zmienić ASP.NET Session coockie name ! Ponieważ łatwiej jest odgadnąć używany język lub wersję serwera, gdy zobaczysz to:

enter image description here

Aby zmienić nazwę pliku cookie: (bądź kreatywny)

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

2
2017-07-11 22:06