Eliminar X-Powered-By

137
  1. ¿Cómo puedo eliminar el encabezado X-Powered-By en PHP? Estoy en un servidor Apache y uso php 5.21. No puedo usar la función header_remove en php ya que no es compatible con 5.21. Utilicé Header unset X-Powered-By, funcionó en mi máquina local, pero no en mi servidor de producción.

  2. Si php no admite header_remove () para ver <5.3, ¿hay alguna alternativa?

Castor
fuente
Versión de PHP en producción: PHP / 5.2.13 Versión de PHP en local: PHP / 5.2.11 Versión de Apache en producción: Apache / 2.2.15 (Unix) Versión de Apache en local: Apache 2.0.63 (usando MAMP en Mac)
Castor
También ten cuidado con los huevos de pascua .
Pacerier

Respuestas:

236

Creo que eso está controlado por la expose_phpconfiguración en PHP.ini :

expose_php = off

Decide si PHP puede exponer el hecho de que está instalado en el servidor (por ejemplo, agregando su firma al encabezado del servidor web). No es una amenaza a la seguridad de ninguna manera, pero permite determinar si usa PHP en su servidor o no.

No existe un riesgo de seguridad directo, pero como señala David C, exponer una versión desactualizada (y posiblemente vulnerable) de PHP puede ser una invitación para que las personas intenten atacarlo.

Pekka
fuente
30
"No es una amenaza a la seguridad de ninguna manera". Esto podría no ser cierto para versiones anteriores de php que se ejecutan en un servidor alojado. He oído que los piratas informáticos pueden explotar 'agujeros' bien documentados en versiones anteriores. Es mejor ocultar este hecho ...
David
14
Estar "completamente actualizado" es un falso positivo de la OMI. Es mejor deshabilitar la información por completo. Es posible que una versión lanzada ayer ya pueda tener una amenaza expuesta, y dependiendo de qué tan agresivo sea su ciclo de actualización, puede ser así durante algún tiempo. Mejor mantenerlos adivinando por completo. Me escondo tanto como puedo, incluyendo las versiones nginx también.
Mike Purcell
1
@David, lo que quiere decir es que no se suma a la amenaza de seguridad que ya enfrenta.
Pacerier
77
Puede y debe informar a propósito un valor incorrecto para el encabezado X-Powered-By. Por ejemplo, si está ejecutando PHP, podría enviar un encabezado X-Powered-By: ASP.NET como una forma de ralentizar a los atacantes para que no identifiquen la configuración del software en su servidor web. Envíe a sus atacantes por una persecución salvaje de ganso para ralentizar sus escaneos.
Chaoix
3
@Pacerier, por supuesto, se suma a la amenaza de seguridad. El pirata informático escanea miles de sitios en busca de presas fáciles ... tener este encabezado cuando está en una versión anterior significa que el servidor ahora es el objetivo cuando anteriormente habría sido ignorado. Se suma a la amenaza de seguridad de forma directa. Incluso mantenerse actualizado, podría aumentar la amenaza en un breve período de tiempo en el que hay una actualización que aún no se ha aplicado.
Nigel B. Peck
50

Si no puede deshabilitar la directiva expose_php para silenciar la capacidad de conversación de PHP (requiere acceso a php.ini ), puede usar la Headerdirectiva de Apache para eliminar el campo de encabezado:

Header unset X-Powered-By
Gumbo
fuente
3
Eso no funciona en mi servidor de producción. Sin embargo, está funcionando en mi máquina local. ¿Alguna idea de porqué está pasando esto?
Castor
@Castor ¿Qué versiones de servidor está utilizando localmente y en la máquina de producción? ¿Alguna diferencia en la configuración de PHP?
Pekka
Versión de PHP en producción: PHP / 5.2.13 Versión de PHP en local: PHP / 5.2.11 Versión de Apache en producción: Apache / 2.2.15 (Unix) Versión de Apache en local: Apache 2.0.63 (usando MAMP en Mac)
Castor
1
@Castor: ¿Mod_headers está disponible en ambos servidores? ¿Y se le permite anular FileInfo (consulte httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo
@Gumbo Sí, mod_headers está disponible en ambos servidores. Y sí, se me permite anular FileInfo.
Castor
24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
luchaninov
fuente
14

Si tiene acceso a php.ini, configúrelo expose_php = Off.

Arseni Mourzenko
fuente
3
Bueno, esto funcionó desde el código php. encabezado ("X-Powered-By:"); Establecer el encabezado X-Powered-By en nada lo eliminó. Gracias a todos por su tiempo y sugerencias.
Castor
4

Si usa FastCGI intente:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
fuente
4

Intente agregar una llamada de encabezado () antes de enviar encabezados, como:

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

independientemente de la configuración de expose_php en php.ini

Daniel Faure
fuente
0

Esta solución funcionó para mí :)

Agregue la siguiente línea en el script y verifique.

Es posible que no se requiera la configuración de nivel de Ngnix / Apache, etc.

header("Server:");
Caminar
fuente