Cada página em um aplicativo MVC com o qual estou trabalhando define esses cabeçalhos HTTP nas respostas:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Como evito que eles sejam exibidos?
Cada página em um aplicativo MVC com o qual estou trabalhando define esses cabeçalhos HTTP nas respostas:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Como evito que eles sejam exibidos?
Respostas:
X-Powered-By
é um cabeçalho personalizado no IIS. Desde o IIS 7, você pode removê-lo adicionando o seguinte ao seu web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Esse cabeçalho também pode ser modificado de acordo com suas necessidades, para obter mais informações, consulte http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Adicione isso para web.config
se livrar do X-AspNet-Version
cabeçalho:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Por fim, para remover X-AspNetMvc-Version
, editar Global.asax.cs
e adicionar o seguinte no Application_Start
evento:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Você também pode modificar cabeçalhos em tempo de execução através do Application_PreSendRequestHeaders
evento in Global.asax.cs
. Isso é útil se os valores do cabeçalho forem dinâmicos:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
cabeçalho. Veja outras respostas sobre como conseguir isso em web.config
.
Você também pode removê-los adicionando código ao seu arquivo 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>
Eu encontrei essa configuração no meu web.config
que era para um New Web Site...
criado no Visual Studio (em oposição a New Project...
). Como a pergunta indica um aplicativo ASP.NET MVC, não é relevante, mas ainda é uma opção.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Atualização : Além disso, Troy Hunt tem um artigo intitulado Shhh… não deixe seus cabeçalhos de resposta falar alto demais com etapas detalhadas sobre a remoção desses cabeçalhos, bem como um link para sua ferramenta ASafaWeb para digitalizá-los e outras configurações de segurança.
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
Para remover o cabeçalho do servidor , no arquivo Program.cs , adicione a seguinte opção:
.UseKestrel(opt => opt.AddServerHeader = false)
Para o dot net core 1, adicione a opção na chamada .UseKestrel (). Para dot net core 2, adicione a linha após UseStartup ().
Para remover o cabeçalho X-Powered-By , se implantado no IIS, edite seu web.config e adicione a seguinte seção na tag system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Para remover o cabeçalho do servidor , no arquivo global.asax, adicione o seguinte:
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);
}
}
}
});
}
}
Pre .NET 4.5.2
Adicione a seguinte classe c # ao seu projeto:
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");
}
}
e, em seu web.config, adicione a seguinte seção <modules>:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
No entanto, tive um problema em que os subprojetos não conseguiram encontrar este módulo. Não tem graça.
Para remover a tag '' X-AspNetMvc-Version '', para qualquer versão do .NET, modifique o arquivo '' web.config '' para incluir:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Obrigado à Microsoft por tornar isso incrivelmente difícil. Ou talvez essa fosse sua intenção, para que você pudesse acompanhar as instalações do IIS e MVC em todo o mundo ...
RemoveServerHeaderModule
isso não vai funcionar no projeto WebApi.
Conforme descrito em Cloaking your ASP.NET MVC Web Application no IIS 7 , você pode desativar o cabeçalho X-AspNet-Version aplicando a seguinte seção de configuração ao seu web.config:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
e remova o cabeçalho X-AspNetMvc-Version alterando seu Global.asax.cs da seguinte maneira:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Conforme descrito em Cabeçalhos personalizados Você pode remover o cabeçalho "X-Powered-By" aplicando a seguinte seção de configuração ao seu web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Não há uma maneira fácil de remover o cabeçalho de resposta "Servidor" por meio da configuração, mas você pode implementar um HttpModule
para remover cabeçalhos HTTP específicos, conforme descrito em Encobrindo seu aplicativo Web do ASP.NET MVC no IIS 7 e em como remover o servidor- x-aspnet-version-x-aspnetmvc-version-e-x-powered by-the-response-header-in-iis7 .
Conforme mostrado em Removendo cabeçalhos de servidor padrão na página Sites do Windows Azure , você pode remover cabeçalhos com o seguinte:
<?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>
Isso remove o cabeçalho do servidor e os cabeçalhos X.
Isso funcionou localmente nos meus testes no Visual Studio 2015.
No Asp.Net Core, você pode editar os arquivos web.config da seguinte forma:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Você pode remover o cabeçalho do servidor nas opções do Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Confira este blog Não use código para remover cabeçalhos. É instável de acordo com a Microsoft
Minha opinião sobre isso:
<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>
Por uma questão de integridade, existe outra maneira de remover o Server
cabeçalho, usando o regedit.
Crie uma entrada DWORD chamada DisableServerHeader na seguinte chave do Registro e defina o valor como 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
Prefiro encontrar uma solução adequada usando o Web.config, mas o uso <rewrite>
não é bom porque requer a instalação do módulo de reescrita e, mesmo assim, ele não remove o cabeçalho, apenas o esvazia.
Você pode alterar qualquer cabeçalho ou qualquer coisa ao Application_EndRequest()
tentar isso
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
O cabeçalho X-Powered-By é adicionado pelo IIS à resposta HTTP, para que você possa removê-lo mesmo no nível do servidor via Gerenciador do IIS:
Você pode usar o web.config diretamente:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>