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.configse livrar do X-AspNet-Versioncabeçalho:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Por fim, para remover X-AspNetMvc-Version, editar Global.asax.cse adicionar o seguinte no Application_Startevento:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Você também pode modificar cabeçalhos em tempo de execução através do Application_PreSendRequestHeadersevento 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-Bycabeç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.configque 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 ...
RemoveServerHeaderModuleisso 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 HttpModulepara 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 Servercabeç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>