Soru UrlScan olmadan Azure / IIS7'de aşırı HTTP yanıtı başlıklarını kaldırma / Gizleme / Devre dışı bırakma


Kaldırmam gerek aşırı üstbilgiler (öncelikle penetrasyon testinden geçmek). UrlScan'ın çalışmasını içeren çözümlere bakmak için zaman harcadım, ama bunlar çok hantal Azure örneğinin her başlatılışında UrlScan'ın yüklenmesi gerekir.

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

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

  • 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 dosyasında MvcHandler tarafından eklendi.
  • X-Powered-By: IIS tarafından eklendi

IIS7'nin "Aşırı Başlıklar" uyarısını önlemek için HTTP yanıt başlıklarını kaldırmak / gizlemek / devre dışı bırakmak için (web.config vb. Aracılığıyla) herhangi bir yolu var mı? asafaweb.com, bir IIS modülünü oluşturmadan veya Azure örneğinin her başlatılışında çalıştırılması gereken yükleyicileri dağıtmadan?


76
2017-10-09 16:01


Menşei




Cevaplar:


Aşağıdaki değişiklikler Azure'daki bu HTTP yanıt başlıklarını kaldırmanıza olanak tanır olmadan özel bir HttpModule yazıyor.

Ağdaki bilgilerin çoğu güncel değil ve UrlScan'ı (IIS7'ye dahil edildi, ancak RemoveServerHeader=1 seçenek kaldırıldı). Aşağıda bulduğum en temiz çözüm (teşekkürler bu blog, bu cevap, ve bu blog Birleştirilen).

Ayırmak Sunucu, Global.asax'a gidin, bul / oluştur Application_PreSendRequestHeaders etkinlik ve aşağıdakileri ekleyin (teşekkürler BK ve bu blog Bu ayrıca Cassini / local dev'de de başarısız olmaz:

Nisan 2014'te Düzenlendi: Yerel IIS modülleriyle PreSendRequestHeaders ve PreSendRequestContext olaylarını kullanabilirsiniz, ancak bunları IHttpModule uygulayan yönetilen modüller ile kullanmayın. Bu özellikleri ayarlamak, sorunlara neden olabilir eşzamansız istekler. 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");
        }
    }

Ayırmak X-aspnet sürümweb.config dosyasında bul / oluştur <system.web> ve Ekle:

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

    ...

Ayırmak X-AspNetMvc sürüm, Global.asax'a gidin, bul / oluştur Application_Start olayı ve aşağıdaki gibi bir satır ekleyin:

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

Ayırmak X-Powered-Byweb.config dosyasında bul / oluştur <system.webServer> ve Ekle:

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

    ...

132
2017-10-09 16:01



harika cevap - teşekkürler - dunnry
IIS'de Azure kullanılmadığında uygulama havuzunun Entegre modda olması gerektiğinin farkında olun. Ve yerel olarak ayıklarken .IsLocal kaldırılmalıdır. - IvanH
C # 'de "Yoda koşulları" na gerek yok - şartlı olarak atama yapılmasına izin vermiyor, en.wikipedia.org/wiki/Yoda_Conditions - tvanfosson
Detay cevabı için teşekkürler, ancak adımları izledim ve takip ettim ama her seferinde siteyi asafweb kullanarak taradım, hala aşırı başlık (X-AspNet-Version) ile ilgili bir konudan bahseder. Bu üstbilgiyi kaldırmak için URLRewrite bile kullandım. Onu kaldırmak için başka olasılıklar var mı? - Raymond A
Halen var olmayan bir dosya isteme sorunu var, ör. "yoursite / foo.jpg";. Bu istek MVC tarafından işlenmediğinden, "Server: IIS x.y" yanıt başlığı hala orada olacaktır. Azure Web Siteleri için çalışan bir çözüm (ve açıkça SADECE azure web siteleri için) bunu <system.webServer> altına eklemek: <security xdt: Transform = "Insert"> <requestFiltering removeServerHeader = "true" /> </ security > - adrian h.


MSDN yayımlandı Bu makale Azure Web Sitelerinde başlıkların nasıl gizleneceği hakkında. Artık system.webServer'a bir giriş ekleyerek sunucuyu web.config dosyasından gizleyebilirsiniz.

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

VS yukarıdaki gibi geçersiz olsa da kaşlarını çattıracak. Yukarıdaki bağlantı bulmak zor resimler olarak kod vardır. MVC sürümü, x-powered-by ve .Net sürümü için yukarıda olduğu gibi uygulama başlangıcında hala gizlidir.


10
2018-01-11 16:39



Bu kesinlikle aradığım şey. Teşekkür ederim. - Martin Costello
Bu Azure için işe yarayabilir, ancak başka bir yerde değil. Bu makaledeki yorumlar, kendi testlerimin yaptığı gibi, bunu onaylıyor. @ Giveme5minutes tarafından cevap, çalışma şeklidir. - CrazyPyro
Bu işlevi yapmak için uygulandığını bilmek güzel olurdu: | Özellikle de URL SCAN daha önce bunu kutunun dışında uyguladı. - felickz


NuGet'te ayrıca birkaç satırlık yapılandırma ve kodda değişiklik yapmanıza yardımcı olan bir paket de var: NWebsec. Sürüm üstbilgileri kaldırmaya yönelik dokümanlar şu adreste bulunabilir: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Burada demode: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure'da)

Yasal Uyarı: Ben projenin geliştiricisi değilim.


6
2017-10-09 19:29



"NWebsec, hemen hemen tüm bu sürüm üstbilgilerini, yani Sunucu: Microsoft-IIS / 8.0 üstbilgisinin hemen hemen tümünü silmenize yardımcı olur." :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers - felickz
Codeplex'ten GitHub'a taşındı (lütfen bağlantıyı güncelleyin github.com/NWebsec/NWebsec/wiki ) - Nordes


Azure Web Siteleri ve tarayıcının görmek istediği birkaç öğeyle ilgili olarak @ giveme5minutes ve @AKhooli'nin önceki yanıtlarını kullanmak, ASafaWeb'i bir Azure sitesiyle mutlu etmek için yaptığım değişiklikler.

Azure yakın ilgi alanı üstbilgisi çerezinin yalnızca https olmadığından şikayetçi olmakla birlikte, benzeşme zaten istediğiniz yinelenen çerez türüdür, 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>

3
2018-01-24 04:07





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

Bu başlıkları bir güvenlik amaç, değiştirmeyi unutma ASP.NET Session coockie name ! Bunu gördüğünüz dili veya sunucu sürümünü tahmin etmek daha kolay olduğundan:

enter image description here

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

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

2
2017-07-11 22:06