ASP.Net MVC Varsayılan HTTP Üstbilgileri nasıl kaldırılır?


176

Çalıştığım bir MVC uygulamasındaki her sayfa bu HTTP başlıklarını yanıtlarda ayarlar:

X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0

Bunların gösterilmesini nasıl önleyebilirim?


2
Bu makaleye göz atın IIS ve ASP.NET'teki Gereksiz HTTP Üstbilgilerini Kaldırma , listelenen tüm üstbilgilerin nasıl kaldırılacağını açıklar.
Pavel Morshenyuk

@PavelMorshenyuk Affedersiniz, sunucu adını da kaldırmanın bir yolunu buldunuz mu? kabul edilen cevap Sunucuyu kaldırmaz
neda Derakhshesh

Yanıtlar:


285

X-Powered-ByIIS'de özel bir üstbilgidir. IIS 7'den bu yana, aşağıdakilere ekleyerek kaldırabilirsiniz web.config:

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

Bu başlık da ihtiyaçlarınıza göre değiştirilebilir, daha fazla bilgi için bkz. Http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders


web.configBaşlıktan kurtulmak için bunu ekleyin X-AspNet-Version:

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

Son olarak, etkinlikte aşağıdakileri kaldırmak X-AspNetMvc-Version, düzenlemek Global.asax.csve eklemek için Application_Start:

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

Ayrıca, başlığındaki Application_PreSendRequestHeadersetkinlik aracılığıyla çalışma zamanında üstbilgileri değiştirebilirsiniz Global.asax.cs. Başlık değerleriniz dinamikse bu yararlıdır:

protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
      Response.Headers.Remove("foo");
      Response.Headers.Add("bar", "quux");
}

4
+1 - Faiz uğruna, 1) Neden ki? 2) Olumsuz bir etkisi var mı?
İngilizDeveloper

69
Bunu, web sayfalarınızı oluşturmak için kullandığınız teknolojiyi gizlemek için güvenlik nedeniyle yaparsınız. Bu, bilgisayar korsanlarını biraz daha fazla çalışmaya zorlar.
RedFilter

20
@BritishDeveloper Bu bir güvenlik incelemesinden çıkan bir öneriydi. Sanırım teknoloji yığınınızın reklamını yapmamak için en iyi uygulama, çünkü bu, bilgisayar korsanlarının bu platformla belirli güvenlik açıklarını hedeflemesine yardımcı oluyor.
Paul Fryer

1
@RedFilter Hızlı ve ayrıntılı cevabınız için teşekkür ederiz!
Paul Fryer

6
IIS 8'de bu, X-Powered-Byüstbilgiyi kaldırmaz . Bunu nasıl başaracağınıza dair diğer cevaplara bakın web.config.
Knelis

105

Bunları global.asax dosyanıza kod ekleyerek de kaldırabilirsiniz:

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
 {
   HttpContext.Current.Response.Headers.Remove("X-Powered-By");
   HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
   HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
   HttpContext.Current.Response.Headers.Remove("Server");
 }

29
Benim durumumda sadece son üçü çalıştı, "X-Powered-By" için hala ihtiyacım vardı<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
Frank van Eykelen

2
Benim durumumda yukarıdaki başlıkların hiçbiri kaldırılmadı. .net 4.0 ve IIS 7 kullanıyorum. Bu konudaki diğer yorumlar sayesinde. En kötü durum "Sunucu" dışında tüm istenmeyen üstbilgileri kaldırmayı başardılar.
Farjad

2
Kod yolunda gitmeyen içerik dosyalarınıza / resimlerinize / vb. Karşı çalışıyor mu?
Mark Sowul

"Sunucu" ya ne koydunuz? böyle olmalı mı Response.Headers.Remove ("Sunucu: Microsoft-IIS / 7.0"); ? ya da "Sunucu" olmalıdır? lütfen yardım
neda Derakhshesh

"PreSendRequestHeaders" aslında ön yanıt üstbilgileri göndermek başka birine garip?
JDPeckham

50

Bu yapılandırmayı Visual Studio'da oluşturulmuş web.configolan için buldum New Web Site...(aksine New Project...). Soru, bir ASP.NET MVC uygulamasını belirttiği için, ilgili değil, yine de bir seçenek.

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

Güncelleme : Ayrıca Troy Hunt Shhh başlıklı bir makaleye sahiptir … yanıt başlıklarınızın bu başlıkları kaldırmayla ilgili ayrıntılı adımların yanı sıra bunları ve diğer güvenlik yapılandırmalarını taramak için ASafaWeb aracına bir bağlantı ile çok yüksek sesle konuşmasına izin vermeyin .


5
En iyi seçenek ancak iis7 gerektirir + Bunları <temizle /> kullanmanız gerekmez ... kaldırmanız yeterlidir .. ayrıca başka bir güvenlik açığını kaldırmak için system.webserver'a eklemek isteyebilirsiniz: code <security> <requestFiltering> <verbs> <add verb = "SEÇENEKLER" izin verildi = "yanlış" /> </verbs> </requestFiltering> </security>code
felickz

Bence <clear /> öğesi 'X-Powererd-By' dahil tüm başlıkları siler, bu nedenle <remove /> öğesi gereksizdir.
Jan H

33

.NET Core

Sunucu üstbilgisini kaldırmak için , Program.cs dosyasında aşağıdaki seçeneği ekleyin:

.UseKestrel(opt => opt.AddServerHeader = false)

Nokta ağı çekirdeği 1 için, seçeneği .UseKestrel () çağrısının içine ekleyin. Nokta ağı çekirdeği 2 için, UseStartup () öğesinden sonra satırı ekleyin.

IIS'ye dağıtılmışsa, X-Powered-By üstbilgisini kaldırmak için web.config dosyanızı düzenleyin ve system.webServer etiketinin içine aşağıdaki bölümü ekleyin:

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

.NET 4.5.2

Sunucu üstbilgisini kaldırmak için global.asax dosyanızın içine aşağıdakileri ekleyin:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] headers = { "Server", "X-AspNet-Version" };

        if (!Response.HeadersWritten)
        {
            Response.AddOnSendingHeaders((c) =>
            {
                if (c != null && c.Response != null && c.Response.Headers != null)
                {
                    foreach (string header in headers)
                    {
                        if (c.Response.Headers[header] != null)
                        {
                            c.Response.Headers.Remove(header);
                        }
                    }
                }
            });
        }

    }

.NET 4.5.2 Öncesi

Projenize aşağıdaki c # sınıfını ekleyin:

public class RemoveServerHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Headers.Remove("Server");
    }
}

ve sonra web.config dosyanızın içine aşağıdaki <modüller> bölümünü ekleyin:

<system.webServer>
    ....
 <modules>
    <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
 </modules>

Ancak alt projelerin bu modülü bulamadığı bir sorun yaşadım. Eğlenceli değil.

X-AspNetMvc-Sürüm başlığını kaldırma

'' X-AspNetMvc-Version '' etiketini kaldırmak için, herhangi bir .NET sürümü için, '' web.config '' dosyanızı aşağıdakileri içerecek şekilde değiştirin:

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

Microsoft'a bunu inanılmaz zorlaştırdığı için teşekkürler. Ya da belki niyetiniz buydu, böylece dünyadaki IIS ve MVC kurulumlarını takip edebilirsiniz ...


3
Bu gün ve yaşta bu "en kötü uygulama" olarak kabul edilir ve Microsoft'un hala "güvensiz" olanı varsayılan ve "güvenli" olarak seçmeyi zorlaştırdığına inanmak zor. Bana Windows'un varsayılan olarak ortak dosya uzantılarını nasıl gizlediğini hatırlatıyor, böylece şüpheli olmayan kullanıcılar virüsleri tıklayacak. 2003 yılında Bill Gates'in "varsayılan olarak güvenli" olduğunu duyurduğunu hatırlıyorum - bu fikre ne oldu?
mike nelson

2
Eğer daha iyi hissettiriyorsa, mikenelson, nginx'te Sunucu etiketini kaldırmaya çalışmak aynı derecede zordur - gerçek kaynak kodunu kesmek zorunda kaldım.
Rocklan

Hakkında RemoveServerHeaderModuleo WebAPI projede işe yaramaz.
kripru

32

IIS 7'de ASP.NET MVC Web Uygulamanızı Gizleme bölümünde açıklandığı gibi , X. AspNet-Version üstbilgisini web.config'nize aşağıdaki yapılandırma bölümünü uygulayarak kapatabilirsiniz:

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

ve Global.asax.cs dosyanızı aşağıdaki gibi değiştirerek X-AspNetMvc-Sürüm başlığını kaldırın:

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

Özel Başlıklar'da açıklandığı gibi "X-Powered-By" başlığını, web.config dosyasına aşağıdaki yapılandırma bölümünü uygulayarak kaldırabilirsiniz:

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer>

"Sunucu" yanıt üstbilgisini yapılandırma yoluyla kaldırmanın kolay bir yolu yoktur, ancak ASP.NET MVC Web Uygulamanızı IIS 7'de gizleme ve nasılHttpModule kaldırılacağı konusunda belirli HTTP Üstbilgilerini kaldırmak için x-aspnet-version-x-aspnetmvc-version-ve-x-powered-by-i-the-iis-head-in-iis7 .


Bkaid yanıtını kullanarak "Sunucu" başlığını kaldırabilirim. IIS 8.
tmorell

bkaid cevap iyidir, ancak kodlama gerektirir, bu yüzden konfigürasyon tabanlı olduğu için tarif ettiğim çözümü daha uygun buldum.
RonyK

8

Üzerinde görüldüğü gibi , Windows Azure Web Siteleri standart Sunucu üst kaldırma sayfasında, aşağıdaki ile başlıklarını kaldırabilirsiniz:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true"/>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

Bu Sunucu üstbilgisini ve X üstbilgilerini kaldırır.

Bu, Visual Studio 2015'teki testlerimde yerel olarak çalıştı.


6
RemoveServerHeader = "true" eklemek ASP.NET 4.5.3 uygulamamda 500 hata verdi
Rocklan

4
@LachlanB bu IIS 10'da eklendi: IIS 10.0, uzak sunuculara HTTP sunucusu üstbilgisini göndermeyi engellemek için removeServerHeader özniteliğini ekledi. Kaynak: iis.net/configreference/system.webserver/security/…
SynerCoder

1
Azure sayfasının kod blokları yerine ekran görüntüleri sağlamasını seviyorum . Bu gereksiz ve potansiyel olarak tehlikeli etiketlerin kaldırılmasını mümkün olduğunca zor hale getirmek için ellerinden geleni yaparlar. Ayrıca, bu sorunu düzeltmek için üç yaşında bir SO sorusuna atıfta bulunduğuma inanamıyorum, bu da düzeltildiğine dair hiçbir işaret göstermiyor.
killa-byte

1
Bu Web.config X-AspNetMvc sürüm üstbilgisini kaldırmaz düşünüyorum. Biz Global.asax içinde bir şey eklemek gerektiğini birini kaldırmak için stackoverflow.com/a/20739875/1678525
Jan H

8

Asp.Net Core'da web.config dosyalarını aşağıdaki gibi düzenleyebilirsiniz:

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

Kestrel seçeneklerinde sunucu başlığını kaldırabilirsiniz:

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 

5

Bu blogu kontrol edin Başlıkları kaldırmak için kod kullanmayın. Microsoft'a göre kararsız

Bunu almam:

<system.webServer>          
    <httpProtocol>
    <!-- Security Hardening of HTTP response headers -->
    <customHeaders>
        <!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent 
                Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
        <add name="X-Content-Type-Options" value="nosniff" />

        <!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not. 
                 By preventing a browser from framing your site you can defend against attacks like clickjacking. 
                 Recommended value "x-frame-options: SAMEORIGIN" -->
        <add name="X-Frame-Options" value="SAMEORIGIN" />

        <!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that 
                 they should only read the master crossdomain.xml file from the root of the website. 
                 https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
        <add name="X-Permitted-Cross-Domain-Policies" value="master-only" />

        <!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers. 
                 Recommended value "X-XSS-Protection: 1; mode=block". -->
        <add name="X-Xss-Protection" value="1; mode=block" />

        <!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. 
                 If you have sensitive information in your URLs, you don't want to forward to other domains 
                 https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
        <add name="Referrer-Policy" value="no-referrer-when-downgrade" />

        <!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
        <remove name="X-Powered-By" />

        <!-- Ensure the cache-control is public, some browser won't set expiration without that  -->
        <add name="Cache-Control" value="public" />
    </customHeaders>
</httpProtocol>

<!-- Prerequisite for the <rewrite> section
            Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite -->
<rewrite>
    <!-- Remove Server response headers (OWASP Security Measure) -->
    <outboundRules rewriteBeforeCache="true">
        <rule name="Remove Server header">
            <match serverVariable="RESPONSE_Server" pattern=".+" />

            <!-- Use custom value for the Server info -->
            <action type="Rewrite" value="Your Custom Value Here." />
        </rule>
    </outboundRules>
</rewrite>
</system.webServer>

4

Tamlık uğruna, Serverregedit kullanarak başlığı kaldırmanın başka bir yolu vardır .

Bu MSDN bloguna bakın .

Aşağıdaki Kayıt Defteri anahtarında DisableServerHeader adlı bir DWORD girdisi oluşturun ve değeri 1 olarak ayarlayın.

HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters

Web.config kullanarak uygun bir çözüm bulmak istiyorum, ancak <rewrite>yeniden yazma modülünün yüklenmesini gerektirdiği için kullanmak iyi değil ve o zaman bile başlığı gerçekten kaldırmayacak, sadece boşaltın.


Bu işe yararsa benim durumum için iyi bir çözüm gibi geliyor. .Net'in farklı sürümlerinde 30 web sitem var ve bu nedenle tüm bu sitelerde başlıkların kaldırılması ve kodun güncellenmesi için 3 farklı yol gerekir. Kodu değiştirmek zorunda kalmadan bir yapılandırma ayarına veya kayıt defterine sahip olmayı tercih ederim.
mike nelson

Bunu iki gün önce başarıyla uyguladım, harika çalışıyor.
Rudey

2

Bunu Application_EndRequest()denemek için herhangi bir başlığı veya herhangi bir şeyi değiştirebilirsiniz

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}

1

X-Powered-By üstbilgisi IIS tarafından HTTP yanıtına eklenir, böylece IIS Yöneticisi aracılığıyla sunucu düzeyinde bile kaldırabilirsiniz:

Web.config dosyasını doğrudan kullanabilirsiniz:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <remove name="X-Powered-By" />
     </customHeaders>
   </httpProtocol>
</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.