Suppression de X-Powered-By

137
  1. Comment puis-je supprimer l'en-tête X-Powered-By en PHP? Je suis sur un serveur Apache et j'utilise php 5.21. Je ne peux pas utiliser la fonction header_remove en php car elle n'est pas prise en charge par la version 5.21. J'ai utilisé Header unset X-Powered-By, cela fonctionnait sur ma machine locale, mais pas sur mon serveur de production.

  2. Si php ne supporte pas header_remove () pour ver <5.3, existe-t-il une alternative?

Castor
la source
Version PHP en production: PHP / 5.2.13 Version PHP en local: PHP / 5.2.11 Version Apache en production: Apache / 2.2.15 (Unix) Version Apache en local: Apache 2.0.63 (en utilisant MAMP sur Mac)
Castor
Attention également aux œufs de Pâques .
Pacerier du

Réponses:

236

Je pense que cela est contrôlé par le expose_phpparamètre de PHP.ini :

expose_php = off

Décide si PHP peut exposer le fait qu'il est installé sur le serveur (par exemple en ajoutant sa signature à l'en-tête du serveur Web). Ce n'est en aucun cas une menace pour la sécurité, mais cela permet de déterminer si vous utilisez PHP sur votre serveur ou non.

Il n'y a pas de risque de sécurité direct, mais comme le note David C, exposer une version obsolète (et probablement vulnérable) de PHP peut être une invitation pour les gens à essayer de l'attaquer.

Pekka
la source
30
«Ce n'est en aucun cas une menace pour la sécurité». Cela peut être faux pour les anciennes versions de php exécutées sur un serveur hébergé. J'ai entendu dire que les pirates peuvent exploiter des «trous» bien documentés dans les versions précédentes. Il vaut mieux cacher ce fait ....
David
14
Être «pleinement à jour» est un faux imo positif. Il est préférable de désactiver complètement les informations. Il est possible qu'une version publiée hier puisse déjà avoir une menace exposée, et en fonction de l'agressivité de votre cycle de mise à niveau, peut l'être pendant un certain temps. Mieux vaut les laisser deviner complètement. Je me cache autant que je peux, y compris les versions nginx.
Mike Purcell
1
@ David, Ce qu'il veut dire est qu'il n'a pas ajouter à la menace de sécurité que vous avez déjà face.
Pacerier du
7
Vous pouvez et devez volontairement signaler une mauvaise valeur pour l'en-tête X-Powered-By. Par exemple, si vous exécutez PHP, vous pouvez envoyer un en-tête X-Powered-By: ASP.NET afin de ralentir les attaquants dans l'identification de la configuration logicielle sur votre serveur Web. Envoyez vos attaquants à la poursuite de l'oie sauvage pour ralentir leurs analyses.
Chaoix
3
@Pacerier, bien sûr, cela ajoute à la menace pour la sécurité. Hacker scanne des milliers de sites à la recherche de proies faciles ... avoir cet en-tête sur une ancienne version signifie que le serveur est maintenant ciblé alors qu'il aurait été ignoré auparavant. Cela ajoute directement à la menace de sécurité. Même en se tenant à jour, cela pourrait ajouter à la menace dans une brève fenêtre de temps où il y a une mise à jour qui n'a pas encore été appliquée.
Nigel B.Peck
50

Si vous ne pouvez pas désactiver la directive expose_php pour couper la conversation de PHP (nécessite un accès au php.ini ), vous pouvez utiliser la Headerdirective Apache pour supprimer le champ d'en-tête:

Header unset X-Powered-By
Gombo
la source
3
Cela ne fonctionne pas sur mon serveur de production. Cela fonctionne cependant sur ma machine locale. Des idées sur pourquoi cela se produit?
Castor
@Castor Quelles versions de serveur utilisez-vous localement et sur la machine de production? Y a-t-il des différences dans la configuration PHP?
Pekka
Version PHP en production: PHP / 5.2.13 Version PHP en local: PHP / 5.2.11 Version Apache en production: Apache / 2.2.15 (Unix) Version Apache en local: Apache 2.0.63 (en utilisant MAMP sur Mac)
Castor
1
@Castor: Les mod_headers sont-ils disponibles sur les deux serveurs? Et êtes-vous autorisé à remplacer FileInfo (voir httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo
@Gumbo Oui, mod_headers est disponible sur les deux serveurs. Et oui, je suis autorisé à remplacer FileInfo.
Castor
24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
Luchaninov
la source
14

Si vous avez un accès à php.ini, définissez expose_php = Off.

Arseni Mourzenko
la source
3
Eh bien, je l'ai fait fonctionner à partir du code php. en-tête ("X-Powered-By:"); La définition de l'en-tête X-Powered-By sur rien l'a supprimé. Merci à tous pour votre temps et vos suggestions.
Castor
4

Si vous utilisez FastCGI, essayez:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
la source
4

Essayez d'ajouter un appel d'en-tête () avant d'envoyer des en-têtes, comme:

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

quel que soit le paramètre expose_php dans php.ini

Daniel Faure
la source
0

Cette solution a fonctionné pour moi :)

Veuillez ajouter la ligne ci-dessous dans le script et vérifier.

Les paramètres de niveau Ngnix / Apache etc. peuvent ne pas être requis.

header("Server:");
Marche
la source