Remoção do X-Powered-By

137
  1. Como posso remover o cabeçalho X-Powered-By no PHP? Estou em um servidor Apache e uso o php 5.21. Não consigo usar a função header_remove no php, pois ela não é suportada pelo 5.21. Eu usei o Header X-Powered-By não configurado, ele funcionava na minha máquina local, mas não no meu servidor de produção.

  2. Se o php não suporta header_remove () para a versão <5.3, existe uma alternativa?

rícino
fonte
Versão do PHP na produção: PHP / 5.2.13 Versão do PHP no local: PHP / 5.2.11 Versão do Apache na produção: Apache / 2.2.15 (Unix) Versão do Apache no local: Apache 2.0.63 (usando MAMP no Mac)
Castor
Também atente para os ovos de páscoa .
Pacerier 11/11/14

Respostas:

236

Eu acho que é controlado pela expose_phpconfiguração no PHP.ini :

expose_php = off

Decide se o PHP pode expor o fato de que ele está instalado no servidor (por exemplo, adicionando sua assinatura ao cabeçalho do servidor da Web). Não é uma ameaça à segurança, mas permite determinar se você usa o PHP no seu servidor ou não.

Não há risco direto à segurança, mas, como observa David C, expor uma versão desatualizada (e possivelmente vulnerável) do PHP pode ser um convite para as pessoas tentarem atacá-lo.

Pekka
fonte
30
"Não é nenhuma ameaça à segurança". Isso pode ser falso para versões mais antigas do php em execução em um servidor hospedado. Ouvi dizer que hackers podem explorar 'buracos' bem documentados em versões anteriores. É melhor esconder esse fato .... #
David David
14
Estar "totalmente atualizado" é uma imo positiva falsa. É melhor desativar completamente as informações. É possível que uma versão lançada ontem já possa ter uma ameaça exposta e, dependendo de quão agressivo seja o seu ciclo de atualização, pode ser por algum tempo. Melhor mantê-los adivinhando completamente. Eu escondo o máximo que posso, incluindo as versões do nginx também.
Mike Purcell
1
@ David, o que ele quer dizer é que isso não aumenta a ameaça à segurança que você já enfrenta.
Pacerier 11/11/14
7
Você pode e deve informar intencionalmente um valor incorreto para o cabeçalho X-Powered-By. Por exemplo, se você estiver executando o PHP, poderá enviar um cabeçalho X-Powered-By: ASP.NET como uma maneira de impedir que os invasores identifiquem a configuração do software em seu servidor web. Envie seus atacantes para um ganso selvagem para desacelerar suas varreduras.
Chaoix
3
@Pacerier, é claro que aumenta a ameaça à segurança. O hacker verifica milhares de sites em busca de presas fáceis ... ter esse cabeçalho em uma versão antiga significa que o servidor agora é direcionado quando anteriormente teria sido ignorado. Isso aumenta a ameaça à segurança de maneira direta. Mesmo mantendo-se atualizado, isso pode aumentar a ameaça em uma breve janela de tempo em que há uma atualização que ainda não foi aplicada.
Nigel B. Peck
50

Se você não pode desativar a diretiva expose_php para silenciar a capacidade de falar do PHP (requer acesso ao php.ini ), use a Headerdiretiva do Apache para remover o campo do cabeçalho:

Header unset X-Powered-By
quiabo
fonte
3
Isso não está funcionando no meu servidor de produção. Está funcionando na minha máquina local. Alguma idéia de por que isso está acontecendo?
rícino
@Castor Que versões de servidor você está usando localmente e na máquina de produção? Alguma diferença na configuração do PHP?
Pekka
Versão do PHP na produção: PHP / 5.2.13 Versão do PHP no local: PHP / 5.2.11 Versão do Apache na produção: Apache / 2.2.15 (Unix) Versão do Apache no local: Apache 2.0.63 (usando MAMP no Mac)
Castor
1
@ Castor: o mod_headers está disponível nos dois servidores? E você tem permissão para substituir o FileInfo (consulte httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo #
@Gumbo Sim, o mod_headers está disponível nos dois servidores. E sim, tenho permissão para substituir o FileInfo.
rícino
24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
luchaninov
fonte
14

Se você tiver acesso ao php.ini, defina expose_php = Off.

Arseni Mourzenko
fonte
3
Bem, eu consegui isso trabalhando no código php. cabeçalho ("X-Powered-By:"); Definir o cabeçalho X-Powered-By como nada o removeu. Obrigado a todos pelo seu tempo e sugestões.
rodízio
4

Se você usa o FastCGI, tente:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
fonte
4

Tente adicionar uma chamada de cabeçalho () antes de enviar cabeçalhos, como:

header('X-Powered-By: Our company\'s development team');

independentemente da configuração expose_php no php.ini

Daniel Faure
fonte
0

Esta solução funcionou para mim :)

Por favor, adicione a linha abaixo no script e verifique.

As configurações de nível do Ngnix / Apache etc. podem não ser necessárias.

header("Server:");
Caminhar
fonte