Setiap halaman dalam aplikasi MVC saya bekerja dengan set header HTTP ini sebagai tanggapan:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Bagaimana saya mencegah ini agar tidak muncul?
Setiap halaman dalam aplikasi MVC saya bekerja dengan set header HTTP ini sebagai tanggapan:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Bagaimana saya mencegah ini agar tidak muncul?
Jawaban:
X-Powered-By
adalah tajuk khusus di IIS. Sejak IIS 7, Anda dapat menghapusnya dengan menambahkan yang berikut ke web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Header ini juga dapat dimodifikasi sesuai kebutuhan Anda, untuk informasi lebih lanjut lihat http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Tambahkan ini ke web.config
untuk menyingkirkan X-AspNet-Version
tajuk:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Akhirnya, untuk menghapus X-AspNetMvc-Version
, mengedit, Global.asax.cs
dan menambahkan yang berikut dalam Application_Start
acara:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Anda juga dapat memodifikasi tajuk saat runtime melalui Application_PreSendRequestHeaders
acara di Global.asax.cs
. Ini berguna jika nilai header Anda dinamis:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
header. Lihat jawaban lain tentang bagaimana untuk mencapai dalam hal ini web.config
.
Anda juga dapat menghapusnya dengan menambahkan kode ke file global.asax Anda:
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>
Saya menemukan konfigurasi ini di saya web.config
yang New Web Site...
dibuat di Visual Studio (sebagai lawan dari a New Project...
). Karena pertanyaan menyatakan aplikasi ASP.NET MVC, tidak relevan, tetapi masih merupakan pilihan.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Pembaruan : Juga, Troy Hunt memiliki artikel berjudul Shhh ... jangan biarkan header respons Anda berbicara terlalu keras dengan langkah-langkah terperinci untuk menghapus header ini serta tautan ke alat ASafaWeb- nya untuk memindai dan konfigurasi keamanan lainnya.
code
<security> <requestFiltering> <verbs> <add kata kerja = <tambahkan kata kerja = "OPSI" diizinkan = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
Untuk menghapus header Server , dalam file Program.cs , tambahkan opsi berikut:
.UseKestrel(opt => opt.AddServerHeader = false)
Untuk dot net core 1, tambahkan opsi di dalam panggilan .UseKestrel (). Untuk dot net core 2, tambahkan baris setelah UseStartup ().
Untuk menghapus header X-Powered-By , jika digunakan untuk IIS, edit web.config Anda dan tambahkan bagian berikut di dalam tag system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Untuk menghapus header Server , dalam file global.asax Anda tambahkan yang berikut ini:
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);
}
}
}
});
}
}
Pra .NET 4.5.2
Tambahkan kelas c # berikut ke proyek Anda:
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");
}
}
dan kemudian di dalam web.config Anda tambahkan bagian <modules> berikut:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Namun saya punya masalah di mana sub proyek tidak dapat menemukan modul ini. Tidak menyenangkan.
Untuk menghapus tag '' X-AspNetMvc-Version '', untuk versi .NET apa pun, ubah file 'web.config' Anda untuk memasukkan:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Terima kasih Microsoft untuk membuat ini sangat sulit. Atau mungkin itu niat Anda sehingga Anda dapat melacak pemasangan IIS dan MVC di seluruh dunia ...
RemoveServerHeaderModule
itu tidak akan berfungsi dalam proyek WebApi.
Seperti yang dijelaskan dalam Cloaking Aplikasi Web ASP.NET MVC Anda di IIS 7 , Anda bisa mematikan header X-AspNet-Version dengan menerapkan bagian konfigurasi berikut ke web.config Anda:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
dan hapus header X-AspNetMvc-Version dengan mengubah Global.asax.cs Anda sebagai berikut:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Seperti yang dijelaskan dalam header khusus, Anda dapat menghapus header "X-Powered-By" dengan menerapkan bagian konfigurasi berikut ke web.config Anda:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Tidak ada cara mudah untuk menghapus header respons "Server" melalui konfigurasi, tetapi Anda dapat menerapkannya HttpModule
untuk menghapus Header HTTP tertentu seperti yang dijelaskan dalam Cloaking Aplikasi Web ASP.NET MVC Anda di IIS 7 dan bagaimana cara menghapus server- x-aspnet-version-x-aspnetmvc-version-dan-x-powered-by-from-the-response-header-in-iis7 .
Seperti yang ditunjukkan pada Menghapus header server standar pada halaman Situs Web Windows Azure , Anda dapat menghapus header dengan yang berikut ini:
<?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>
Ini menghapus header Server, dan header-X.
Ini bekerja secara lokal dalam pengujian saya di Visual Studio 2015.
Di Asp.Net Core Anda dapat mengedit file web.config seperti:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Anda dapat menghapus header server di opsi Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Periksa blog ini. Jangan gunakan kode untuk menghapus header. Itu tidak stabil menurut Microsoft
Pandangan saya tentang ini:
<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>
Demi kelengkapan, ada cara lain untuk menghapus Server
header, menggunakan regedit.
Buat entri DWORD yang disebut DisableServerHeader di kunci Registri berikut dan atur nilainya menjadi 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
Saya lebih suka mencari solusi yang tepat menggunakan Web.config, tetapi menggunakan <rewrite>
itu tidak baik karena membutuhkan modul penulisan ulang yang harus diinstal, dan bahkan kemudian itu tidak akan benar-benar menghapus header, kosongkan saja.
Anda dapat mengubah tajuk apa pun atau apa pun di Application_EndRequest()
coba ini
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Header X-Powered-By ditambahkan oleh IIS ke respons HTTP, sehingga Anda dapat menghapusnya bahkan di tingkat server melalui IIS Manager:
Anda dapat menggunakan web.config secara langsung:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>