Кожна сторінка програми MVC, над якою я працюю, встановлює відповіді на заголовки HTTP:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Як я можу запобігти їх показу?
Кожна сторінка програми MVC, над якою я працюю, встановлює відповіді на заголовки HTTP:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Як я можу запобігти їх показу?
Відповіді:
X-Powered-By
є спеціальним заголовком в IIS. Починаючи з IIS 7, ви можете видалити його, додавши до свого web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Цей заголовок також можна змінити для ваших потреб, для отримання додаткової інформації див. Http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Додайте це, щоб web.config
позбутися X-AspNet-Version
заголовка:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Нарешті, щоб видалити X-AspNetMvc-Version
, відредагувати Global.asax.cs
та додати наступне у Application_Start
випадку:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Ви також можете змінювати заголовки під час виконання через Application_PreSendRequestHeaders
подію в Global.asax.cs
. Це корисно, якщо значення заголовка динамічні:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
заголовок. Дивіться інші відповіді, як цього досягти web.config
.
Ви також можете видалити їх, додавши код у файл global.asax:
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>
Я знайшов цю конфігурацію у своїй, web.config
яка була New Web Site...
створена у Visual Studio (на відміну від a New Project...
). Оскільки в запитанні вказано додаток ASP.NET MVC, це не так актуально, але все-таки є варіантом.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Оновлення : Крім того, у Troy Hunt є стаття під назвою Shhh… не дозволяйте заголовкам ваших відповідей занадто гучно говорити з детальними кроками щодо видалення цих заголовків, а також посиланням на його інструмент ASafaWeb для сканування їх та інших конфігурацій безпеки.
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" дозволяється = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
Щоб видалити заголовок сервера , у файлі Program.cs додайте наступну опцію:
.UseKestrel(opt => opt.AddServerHeader = false)
Для точкового чистого ядра 1 поставте додавання опції всередині виклику .UseKestrel (). Для точкового чистого ядра 2 додайте рядок після UseStartup ().
Щоб видалити заголовок X-Powered-By , якщо він розгорнуто в IIS, відредагуйте веб-конфіг і додайте наступний розділ всередині тегу system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Щоб видалити заголовок сервера , у файл global.asax додайте наступне:
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
Додайте до свого проекту такий клас c #:
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");
}
}
а потім у свій web.config додайте наступний розділ <модулі>:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Однак у мене виникла проблема, коли підпроекти не змогли знайти цей модуль. Не смішно.
Щоб видалити тег '' X-AspNetMvc-Version '', для будь-якої версії .NET модифікуйте файл '' web.config '', щоб він включав:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Дякую Microsoft, що зробив це неймовірно складно. А може, це був ваш намір, щоб ви могли відстежувати встановлення IIS та MVC по всьому світу ...
RemoveServerHeaderModule
це не буде працювати у проекті WebApi.
Як описано в прихованні веб-програми ASP.NET MVC на IIS 7 , ви можете вимкнути заголовок X-AspNet-Version, застосувавши до розділу web.config такий розділ конфігурації:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
та видаліть заголовок X-AspNetMvc-Version, змінивши ваш Global.asax.cs наступним чином:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Як описано у користувацьких заголовках Ви можете видалити заголовок "X-Powered-By", застосувавши до розділу web.config такий розділ конфігурації:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Немає простого способу видалення заголовка відповіді "Сервер" за допомогою конфігурації, але ви можете реалізувати HttpModule
для видалення конкретних заголовків HTTP, як описано в Прихованні веб-додатка ASP.NET MVC на IIS 7 та в розділі " Як видалити сервер" x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7 .
Як показано на Видаленні стандартних заголовків серверів на сторінці веб-сайтів Windows Azure , ви можете видалити заголовки за допомогою наступного:
<?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>
Це видаляє заголовок сервера та заголовки X.
Це працювало локально на моїх тестах у Visual Studio 2015.
У Asp.Net Core ви можете редагувати файли web.config так:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Ви можете видалити заголовок сервера в параметрах Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Перевірте цей блог Не використовуйте код для видалення заголовків. Відповідно до Microsoft, він нестабільний
Моє взяти на це:
<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>
Для повноти є ще один спосіб видалити Server
заголовок, використовуючи regedit.
Створіть запис DWORD під назвою DisableServerHeader у наступному ключі реєстру та встановіть значення 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Параметри
Я вважаю за краще знайти правильне рішення за допомогою Web.config, але використовувати <rewrite>
це не добре, оскільки він вимагає встановлення модуля перезапису, і навіть тоді він не дійсно видалить заголовок, просто випорожнить його.
Ви можете змінити будь-який заголовок або що - небудь в Application_EndRequest()
спробувати це
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Заголовок X-Powered-By додається IIS до відповіді HTTP, тому ви можете видалити його навіть на рівні сервера через менеджер IIS:
Ви можете використовувати web.config безпосередньо:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>