63 votes

Comment désactiver les URLs "easter egg" de PHP ?

J'ai récemment découvert ce que l'on appelle "URLs d'oeufs de Pâques" en PHP :

Il s'agit des quatre chaînes de recherche que vous pouvez ajouter à la fin d'une page Web PHP pour afficher une image ou une page Web (quelque peu) cachée :

  1. ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

Celui-ci est le plus intéressant, et affiche une image "easter egg" (oeuf de Pâques) soit d'un lapin dans une maison (le lapin de Sterling Hughes, appelé Carmella), d'un chien marron dans l'herbe, d'un Scottish Terrier noir, d'un logo php un enfant débraillé, dessiné à la main, un logo php coloré au crayon, un homme avec du un type avec des baguettes de pain (ressemblant à des crayons ou des frites) sortant de sa bouche comme un morse, ou un logo PHP d'éléphant.

enter image description here

Parmi les autres, citons :

  • ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 (Logo PHP)
  • ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 (logo Zend)
  • ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 (Crédits PHP)

J'ai été choqué de découvrir que cela fonctionne sur de nombreux sites web, y compris le mien. Je pense que c'est stupide et je veux le désactiver, mais d'après ce que j'ai entendu, la seule façon de le faire est dans le php.ini avec expose_php = Off et il ne peut pas être défini au moment de l'exécution con ini_set() .

Je n'ai pas d'accès direct au php.ini sur le serveur en direct. Cependant, j'ai trouvé comment désactiver l'option X-Powered-By en utilisant Header unset X-Powered-By sur .htaccess o header('X-Powered-By: ') dans le code PHP.

Existe-t-il un autre moyen de désactiver ces "oeufs de Pâques", ou dois-je modifier ce paramètre dans l'application principale ? php.ini (et est-ce bien la bonne/seule façon de désactiver ces URL) ?

8 votes

Ils ne font de mal à personne, alors pourquoi s'en préoccuper ?

64 votes

Parce que je pense que c'est stupide, et que cela révèle le fait que vous utilisez PHP.

2 votes

De la façon dont je le vois, si vous voulez utiliser un moteur entier dans lequel des gens ont investi beaucoup de temps, et que tout ce qu'ils veulent en retour est de laisser quelques oeufs de Pâques inoffensifs, alors pourquoi pas ? :D C'est amusant. Je parie que vous vous êtes amusés rien qu'en les cherchant !

60voto

true Points 4609

Dans le php.ini

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
 expose_php = Off

Cela supprimera effectivement les œufs de Pâques

6 votes

L'OP a dit "Je n'ai pas d'accès direct à php.ini sur le serveur live".

44 votes

Bien que cela ne réponde pas à la question de l'OP, c'est quand même utile pour les personnes qui tombent sur cette question et qui ont accès à php.ini.

3 votes

Si vous n'avez pas accès au php.ini, vous devez le signaler à l'administrateur système pour que ce paramètre soit désactivé dans un environnement de production. Je vous recommande donc cette réponse.

32voto

DanRedux Points 3018

Une réécriture globale rapide de HTACCESS pourrait regexer la chaîne exacte de chaque URL, se débarrassant ainsi de la seule partie amusante de PHP sans toucher au fichier ini ni avoir besoin d'une fonction au début de chaque fichier.

Je ne l'ai pas encore testé, mais cela devrait fonctionner :

RewriteEngine On
RewriteCond %{QUERY_STRING} \PHPE9568F36-D428-11d2-A769-00AA001ACF42\ [NC]
RewriteRule .* - [F]

Bien sûr, il suffit de copier les 2 dernières lignes pour chacune des autres requêtes possibles, ou d'écrire une regex plus générique. Je ne suis pas doué pour les expressions rationnelles :)

Cette version couvre tout le plaisir des oeufs de Pâques et a été trouvée ici :

RewriteEngine On
RewriteCond %{QUERY_STRING} \=PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12} [NC]
RewriteRule .* - [F]

0 votes

Vous avez une idée de la manière exacte de procéder ? Je peux faire la recherche moi-même, mais si vous pouvez fournir un exemple pour se débarrasser de l'une des URL, ce serait d'une grande aide. Savez-vous si la directive ini que j'ai citée est correcte et si elle permet de se débarrasser de ces éléments ?

0 votes

Merci pour l'idée, cette règle particulière me donne "internal server error", mais le lien de l'autre commentaire (qui est maintenant supprimé) en avait un qui semblait fonctionner : akeeba.assembla.com/code/master-htaccess/git/nodes/htaccess.txt Sous "Disallow PHP Easter Eggs" N'hésitez pas à l'ajouter à votre message pour les autres !

0 votes

Oui, la directive ini cache tous les signes de vie de PHP, y compris les 5 url d'easter egg (les 4 que vous avez mentionnées, et la 1 qui exécute une requête MySQL avec le paramètre GET "query" si MySQL est installé).

10voto

chiliNUT Points 3249

Mise à jour : Ceci a été supprimé dans PHP 5.5, notez que ces liens ne fonctionnent plus sur php.net.

http://phpsadness.com/sad/11

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X