Existe alguma maneira de remover o cabeçalho de resposta "Servidor" do IIS7? Existem alguns artigos mostrando que usando HttpModules podemos conseguir o mesmo. Isso será útil se não tivermos direito de administrador ao servidor. Também não quero escrever filtro ISAPI.
Tenho direitos de administrador no meu servidor. Portanto, não quero fazer as coisas acima. Então, por favor, me ajude a fazer o mesmo.
Respostas:
Adicione isso ao seu global.asax.cs:
fonte
NullReferenceException
na Cassini se confiar emHttpContext.Current
. Esta postagem de blog mostra como fazer isso evitando interromper o suporte da Cassini, se isso for importante para você.PreSendRequestHeaders
em uma classe que implementeIHttpModule
ouGlobal.asax
. Eu testemunhei o evento de congelamento do aplicativo no servidor sob carga de estresse. OBeginRequest
evento deve funcionar para fazer alterações no cabeçalho da resposta. Consulte hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .No IIS7, você deve usar um módulo HTTP. Construa o seguinte como uma biblioteca de classes no VS:
Em seguida, adicione o seguinte ao seu web.config ou configure-o no IIS (se você configurar no IIS, o assembly deve estar no GAC).
fonte
HttpApplication
, oHttpRequest
, oHttpContext
e oHttpResponse
não estãonull
, bem como verificar seHttpRequest.IsLocal
estãofalse
.PreSendRequestHeaders
pode causar problemas com o HttpCacheModule , você deve usar algo comoPostReleaseRequestState
.Com o URL Rewrite Module Versão 2.0 para IIS (UrlRewrite) habilitado, na seção de configuração
<configuration>
➡<system.webServer>
➡<rewrite>
adicione a regra de saída:fonte
rewrite
nó emsystem.webServer
. Cuidado, isso travará seu site se UrlRewrite não estiver instalado no servidor. E é melhor você usar o console de configuração do IIS primeiro para verificar como ele escreve esses nós de configuração.Scott Mitchell fornece em uma postagem de blog soluções para remover cabeçalhos desnecessários .
Como já foi dito aqui em outras respostas, para o
Server
cabeçalho, existe a solução do módulo http , ou uma solução web.config para IIS 10+ , ou você pode usar URLRewrite para apagá-lo .A solução mais prática para uma configuração atualizada (IIS 10 +) é usar
removeServerHeader
o web.config:Para
X-AspNet-Version
eX-AspNetMvc-Version
, ele fornece uma maneira melhor do que removê-los em cada resposta: simplesmente não gerá-los de forma alguma.Use
enableVersionHeader
para desativarX-AspNet-Version
, em web.configUse
MvcHandler.DisableMvcResponseHeader
no evento .Net Application_Start para desabilitarX-AspNetMvc-Version
E, finalmente, remova na configuração do IIS o
X-Powered-By
cabeçalho personalizado em web.config.Cuidado, se você tiver ARR (Application Request Routing), ele também adicionará o seu próprio
X-Powered-By
, que não será removido pelas configurações de cabeçalhos personalizados. Este deve ser removido através do Gerenciador do IIS, configuração do Editor na raiz do IIS (não em um site): vá para osystem.webServer/proxy
nó e definaarrResponseHeader
comofalse
. Após umIISReset
, ele é levado em consideração.(Eu encontrei este aqui , exceto que esta postagem é sobre a maneira antiga do IIS 6.0 de configurar as coisas.)
Não se esqueça de que a solução por código de aplicativo não se aplica por padrão ao cabeçalho gerado em conteúdo estático (você pode ativar o
runAllManagedModulesForAllRequests
para alterar isso, mas faz com que todas as solicitações executem o pipeline .Net). Não é um problema,X-AspNetMvc-Version
pois não é adicionado ao conteúdo estático (pelo menos se a solicitação estática não for executada no pipeline .Net).Nota lateral: quando o objetivo é encobrir a tecnologia usada, você também deve alterar os nomes dos cookies .Net padrão (
.ASPXAUTH
se a autenticação de formulários estiver ativada (use oname
atributo naforms
tag em web.config),ASP.NET_SessionId
(use<sessionState cookieName="yourName" />
em web.config nasystem.web
tag),__RequestVerificationToken
(altere-o por código comAntiForgeryConfig.CookieName
, mas infelizmente não se aplica à entrada oculta que este sistema gera no html)).fonte
Na verdade, os módulos codificados e os exemplos Global.asax mostrados acima funcionam apenas para solicitações válidas.
Por exemplo, adicione <no final do seu URL e você obterá uma página de "Solicitação inválida" que ainda expõe o cabeçalho do servidor. Muitos desenvolvedores ignoram isso.
As configurações de registro mostradas também não funcionam. URLScan é a ÚNICA maneira de remover o cabeçalho do "servidor" (pelo menos no IIS 7.5).
fonte
Ou adicione web.config:
fonte
X-AspNet-Version
eX-AspNetMvc-Version
cabeçalho. O que sei é que nem sempre funciona assim (se é que funcionou). Veja a resposta @Frederic para uma maneira mais confiável de removê-los.Esta
web.config
configuração funciona para remover todos os cabeçalhos desnecessários da resposta ASP.NET (pelo menos a partir do IIS 10):Observe que isso oculta todos os cabeçalhos do "aplicativo", assim como todas as outras abordagens. Se você, por exemplo, acessar alguma página padrão ou uma página de erro gerada pelo próprio IIS ou ASP.NET fora de seu aplicativo, essas regras não se aplicarão. Portanto, o ideal é que eles estejam no nível raiz do IIS e isso pode deixar algumas respostas de erro para o próprio IIS.
PS: Há um bug no IIS 10 que às vezes o faz mostrar o cabeçalho do servidor, mesmo com a configuração correta. Já deve estar corrigido, mas o IIS / Windows precisa ser atualizado.
fonte
Além da resposta de reescrita de URL , aqui está o XML completo para
web.config
URL Rewrite
fonte
Para remover o
Server:
cabeçalho, acesseGlobal.asax
, encontre / crie oApplication_PreSendRequestHeaders
evento e adicione uma linha da seguinte forma (graças a BK e a este blog isso também não irá falhar no Cassini / dev local):Se você deseja uma solução completa para remover todos os cabeçalhos relacionados no Azure / IIS7 e também funciona com a Cassini, consulte este link , que mostra a melhor maneira de desabilitar esses cabeçalhos sem usar HttpModules ou URLScan.
fonte
Se você deseja apenas remover o cabeçalho, pode usar uma versão abreviada da resposta de lukiffer:
E então em
Web.config
:fonte
Tente definir a
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
entrada do registro comoREG_DWORD
de1
.fonte
OnPreSendRequestHeaders
manipulador de eventos (veja acima) nunca está disparando, por algum motivo.O UrlScan também pode remover o cabeçalho do servidor usando
AlternateServerName=
sob[options]
.fonte
Seguindo a resposta de eddiegroves , dependendo da versão do URLScan, você pode preferir
RemoveServerHeader=1
em[options]
.Não tenho certeza em qual versão do URLScan essa opção foi adicionada, mas ela está disponível na versão 2.5 e posteriores.
fonte
Encontrei um artigo que explica por que precisamos fazer a edição do Registro e usar uma ferramenta como o UrlScan para configurar isso no IIS corretamente. Acompanhei em nossos servidores e funciona: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Se você usar apenas o UrlScan, mas não fizer a alteração do registro, durante o tempo em que estiver interrompendo o World Wide Publishing Service, seu servidor retornará uma resposta http do servidor a partir do arquivo HTTP.sys. Além disso, aqui estão os erros comuns de uso da ferramenta UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
fonte
No IIS 10, usamos uma solução semelhante à abordagem de Drew, ou seja:
E, obviamente, adicione uma referência a essa dll em seu (s) projeto (s) e também o módulo na (s) configuração (ões) que você deseja:
NOTA IMPORTANTE1: Esta solução precisa de um pool de aplicativos definido como integrado;
NOTA IMPORTANTE2: Todas as respostas dentro do aplicativo da web serão afetadas por isso (css e js incluídos);
fonte
Eu pesquisei isso e o método URLRewrite funciona bem. Parece que não consigo encontrar bem a mudança em nenhum lugar. Eu escrevi isso compatível com PowerShell v2 e superior e testei no IIS 7.5.
fonte
Você pode adicionar o código abaixo no arquivo Global.asax.cs
fonte
A solução proposta acima em combinação funcionou para mim com as seguintes alterações. Aqui estou postando meu cenário e solução.
Para mim, eu queria remover os seguintes cabeçalhos:
Eu adicionei isso ao meu global.asax:
O evento acima não estava sendo disparado, então, para isso, adicionei o seguinte ao web.config e funcionou.
e para remover o cabeçalho da versão, também adicionei o seguinte ao web.config:
Mudanças no web.config:
Espero que ajude!
fonte
Eu tentei todas as coisas aqui e em vários outros threads de estouro de pilha semelhantes.
Eu fiquei um pouco travado porque esqueci de limpar o cache do meu navegador depois de fazer alterações na configuração. Se você não fizer isso e o arquivo estiver em seu cache local, ele o servirá de volta para você com os cabeçalhos originais (duh).
Consegui principalmente ao remover runAllManagedModulesForAllRequests:
Isso removeu os cabeçalhos estranhos da maioria dos arquivos estáticos, mas eu ainda estava obtendo o cabeçalho "Servidor" em alguns arquivos estáticos em meu projeto WebAPI com arrogância.
Finalmente encontrei e apliquei esta solução e agora todos os cabeçalhos indesejados se foram:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
que discute seu código que está aqui:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
Este é um módulo Native-Code. É capaz de remover o cabeçalho do servidor, não apenas apagar o valor. Por padrão, ele remove:
fonte
IIS 7.5 e, possivelmente, versões mais recentes têm o texto do cabeçalho armazenado em
iiscore.dll
Usando um editor hexadecimal, encontre a string e a palavra "Servidor"
53 65 72 76 65 72
depois dela e substitua-as por bytes nulos. No IIS 7.5, é assim:Ao contrário de alguns outros métodos, isso não resulta em uma penalidade de desempenho. O cabeçalho também é removido de todas as solicitações, mesmo de erros internos.
fonte