Каждая страница в приложении 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
Как предотвратить их показ?
"powered by" - это настраиваемый заголовок в IIS. Изменение зависит от версии IIS, которую вы используете. Для получения дополнительной информации о том, как изменить или удалить, см. Здесь:
http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Чтобы удалить заголовок MVC,
В Global.asax в событии запуска приложения:
MvcHandler.DisableMvcResponseHeader = true;
Поместите это в web.config, чтобы избавиться от заголовка X-AspNet-версии:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Вы также можете удалить их, добавив код в файл 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");
}
Я нашел эту конфигурацию в моей web.config
, которая была для New Web Site...
, созданной в Visual Studio (в отличие от New Project...
). Поскольку в этом вопросе указывается приложение ASP.NET MVC, оно не является релевантным, но все же является опцией.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Обновить. Кроме того, у Troy Hunt есть статья под названием Shhh... не позволяйте вашим заголовкам ответов говорить слишком громко с подробными инструкциями по удалению этих заголовки, а также ссылку на его ASafaWeb инструмент для сканирования для них и других конфигураций безопасности.
Как описано в Cloaking вашего веб-приложения 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>
Нет простого способа удалить заголовок ответа "Server" с помощью конфигурации, но вы можете реализовать HttpModule
для удаления определенных заголовков HTTP, как описано в Cloaking your ASP.NET MVC Web Application на IIS 7 и в how-to-remove-server-x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7.
Чтобы удалить заголовок Сервер, в файле Program.cs, добавьте следующий параметр, когда вызывается .UseKestrel:
.UseKestrel(opt => opt.AddServerHeader = false)
Чтобы удалить заголовок X-Powered-By, если он развернут в IIS, отредактируйте файл web.config и добавьте следующий раздел в тег system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Чтобы удалить заголовок Сервер, в файле 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);
}
}
}
});
}
}
Добавьте в свой проект следующий класс С#:
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 добавьте следующие <modules> раздел:
<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 по всему миру...
В Asp.Net Core вы можете редактировать файлы web.config следующим образом:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Вы можете удалить заголовок сервера в настройках Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Как показано на Удаление стандартных заголовков серверов на веб-сайтах 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.
Вы можете изменить любой заголовок или что-нибудь в Application_EndRequest()
попробуйте
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Для полноты есть другой способ удалить заголовок Server
, используя regedit.
Создайте запись DWORD под названием DisableServerHeader в следующем ключе реестра и установите для нее значение 1.
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Параметры
Я предпочел бы найти правильное решение с помощью Web.config, но использование <rewrite>
не очень хорошо, потому что для этого требуется, чтобы модуль перезаписи был установлен, и даже тогда он действительно не удалит заголовок, просто пуст его.
Заголовок X-Powered-By добавляется IIS к HTTP-ответу, поэтому вы можете удалить его даже на уровне сервера через диспетчер IIS:
Вы можете напрямую использовать web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>