Ç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-By
IIS'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.config
Baş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.cs
ve eklemek için Application_Start
:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Ayrıca, başlığındaki Application_PreSendRequestHeaders
etkinlik 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.config
olan 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 ...
RemoveServerHeaderModule
o 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, Server
regedit 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>