Ç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?
Ç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?
Yanıtlar:
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");
}
X-Powered-Byüstbilgiyi kaldırmaz . Bunu nasıl başaracağınıza dair diğer cevaplara bakın web.config.
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");
}
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
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 .
code <security> <requestFiltering> <verbs> <add verb = "SEÇENEKLER" izin verildi = "yanlış" /> </verbs> </requestFiltering> </security>code
.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-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 ...
RemoveServerHeaderModuleo WebAPI projede işe yaramaz.
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 .
Ü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ı.
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;
})
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>
Tamlık uğruna, Serverregedit kullanarak başlığı kaldırmanın başka bir yolu vardır .
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.
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");
}
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>