Azure / IIS7'de UrlScan olmadan aşırı HTTP yanıt üstbilgilerini Kaldırma / Gizleme / Devre Dışı Bırakma


86

Aşırı başlıkları kaldırmam gerekiyor (öncelikle sızma testini geçmek için). UrlScan'i çalıştırmayı içeren çözümlere bakmak için zaman harcadım, ancak bir Azure örneği her başlatıldığında UrlScan'in yüklenmesi gerektiğinden bunlar külfetli .

Azure için, startup.cmd'den yükleyicileri dağıtmayı içermeyen iyi bir çözüm bulunmalıdır.

Yanıt başlıklarının farklı yerlere eklendiğini anlıyorum :

  • Sunucu : IIS tarafından eklendi.
  • X-AspNet-Sürümü : HttpResponse sınıfında Flush sırasında System.Web.dll tarafından eklendi
  • X-AspNetMvc-Sürümü : System.Web.dll'de MvcHandler tarafından eklendi.
  • X-Powered-By : IIS tarafından eklendi

Yapılandırmak için herhangi bir yolu (via web.config vb?) IIS7 de uyarı "Aşırı Başlıkları" önlemek için HTTP yanıt başlıklarını devre dışı / / hide kaldırmak var mı asafaweb.com bir yaratmadan, hangi ihtiyaç için modül veya dağıtma montajcılar IIS Azure örneği her başladığında çalıştırılacak mı?

Yanıtlar:


139

Aşağıdaki değişiklikler Azure'de bu HTTP yanıt başlıklarını kaldırmak için izin olmadan özel bir HttpModule yazma.

İnternetteki bilgilerin çoğu güncel değil ve UrlScan'i içeriyor (o zamandan beri IIS7'ye entegre edildi, ancak RemoveServerHeader=1seçenek kaldırıldı). Aşağıda bulduğum en temiz çözüm var ( bu blog , bu cevap ve bu blog sayesinde ).

Sunucuyu kaldırmak için Global.asax'a gidin, Application_PreSendRequestHeadersetkinliği bulun / oluşturun ve aşağıdakileri ekleyin ( BK ve bu blog sayesinde bu , Cassini / yerel geliştiricide de başarısız olmaz):

Nisan 2014'te düzenlendi: PreSendRequestHeaders ve PreSendRequestContext olaylarını yerel IIS modülleriyle kullanabilirsiniz, ancak bunları IHttpModule'ü uygulayan yönetilen modüllerle kullanmayın. Bu özelliklerin ayarlanması, zaman uyumsuz isteklerde sorunlara neden olabilir . Doğru sürüm, BeginRequest olayını kullanmaktır.

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

X-AspNet-Version kaldırmak için web.config dosyasında bulun / oluşturun <system.web>ve ekleyin:

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

    ...

X-AspNetMvc-Version'u kaldırmak için Global.asax'a gidin, Application_Startolayı bulun / oluşturun ve aşağıdaki gibi bir satır ekleyin:

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

X-Powered- By'yi kaldırmak için web.config dosyasında bulun / oluşturun <system.webServer>ve ekleyin:

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

    ...

VS'deki ipuçlarına göre, İstek, Yanıt veya Yanıtın boş olarak kontrol edilmesine gerek yoktur
Chris Haines

1
Azure'da değil IIS'de kullanıldığında, uygulama havuzunun Tümleşik modda olması gerektiğini unutmayın. Ve .IsLocal yerel olarak hata ayıklarken kaldırılmalıdır.
IvanH

5
C # 'da "Yoda koşulları" na gerek yoktur - koşullu bir atamaya izin vermez, en.wikipedia.org/wiki/Yoda_Conditions
tvanfosson

1
Ayrıntılı cevap için teşekkürler, ancak adımları denedim ve takip ettim ancak siteyi asafweb kullanarak her taradığımda, hala aşırı başlık (X-AspNet-Version) ile ilgili bir sorundan bahsediyor. Bu başlığı kaldırmak için URLRewrite bile kullandım. Kaldırmanın başka olasılıkları var mı?
Raymond

4
Varolmayan bir dosya talep etme sorunu hala var, örneğin " siteniz / foo.jpg ". Bu istek MVC tarafından işlenmediğinden, yanıt başlığı "Sunucu: IIS xy" hala orada olacaktır. Azure Web Siteleri (ve YALNIZCA azure web siteleri için) için çalışan bir çözüm, bunu <system.webServer> altına eklemektir: <security xdt: Transform = "Insert"> <requestFiltering removeServerHeader = "true" /> </ security >
adrian h.

12

MSDN , Azure Web Sitelerinde başlıkların nasıl gizleneceği ile ilgili bu makaleyi yayınladı . Artık system.webServer'a bir girdi ekleyerek sunucuyu web.config'den gizleyebilirsiniz.

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

VS, yukarıdakileri geçersiz olarak kabul edecek. Yukarıdaki bağlantının kodu resim olarak var, bulunması zor. MVC sürümü, x-powered-by ve .Net sürümü için aynı şekilde yukarıdaki uygulama başlangıcında hala gizlidir.


3
Bu tam olarak aradığım şeydi. Teşekkür ederim.
Martin Costello

3
Bu, Azure için işe yarayabilir, ancak başka hiçbir yerde çalışmayabilir. Bu makaledeki yorumlar, benim kendi testlerim gibi bunu doğruluyor. @ Giveme5minutes tarafından verilen yanıt, çalışma şeklidir.
CrazyPyro

Bu işlevi yapmak için neyin uygulandığını bilmek güzel olurdu: | Özellikle URL TARAMA bunu daha önce kutudan çıkardığı için.
felickz

6

NuGet'te bunu birkaç satırlık yapılandırma ve kodda değişiklik olmadan gerçekleştirmenize yardımcı olan bir paket de var: NWebsec. Sürüm başlıklarının kaldırılmasıyla ilgili belgeler burada bulunabilir: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Demosu burada: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure'da)

Sorumluluk reddi: Projenin geliştiricisiyim.


"NWebsec hemen hemen tüm bu sürüm başlıklarını, yani Sunucu hariç tümünü gizlemenize yardımcı olur: Microsoft-IIS / 8.0 başlığı." :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
felickz

Codeplex'ten GitHub'a taşındı (lütfen github.com/NWebsec/NWebsec/wiki bağlantısını güncelleyin )
Nordes

6

Nick Evans'ın cevabı mükemmel, ama ...

Bu başlıkları güvenlik amacıyla kaldırırsanız ASP.NET Session coockie name,! Çünkü bunu gördüğünüzde kullanılan dili veya sunucu sürümünü tahmin etmek daha kolaydır:

görüntü açıklamasını buraya girin

Çerez adını değiştirmek için: (yaratıcı olun)

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

Çerez adını değiştirmenin, sunucu teknolojisinin açığa
çıkmasından

4

@ Giveme5minutes ve @AKhooli'den gelen önceki yanıtları Azure Web Siteleriyle ilgili olarak ve tarayıcının görmek istediği diğer birkaç öğeyi toplayarak, bunlar ASafaWeb'i bir Azure sitesinde mutlu etmek için yaptığım değişiklikler.

Yine de Azure benzeşim başlık çerezinin yalnızca https olmadığından şikayet ediyor, ancak yine de yeniden oynatılmasını istediğiniz çerez türü benzeşiyor, değil mi?

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.