web-dev-qa-db-fra.com

Chaîne de requête encodée avec une URL avec% 0 nul inséré sur certains serveurs

Nous avons besoin d'envoyer une chaîne cryptée dans une chaîne de requête à une page Web. Parfois, à cause du chiffrement, il y a un null incorporé dans la chaîne. Voici un exemple abrégé d'une telle chaîne, montrant les caractères à droite du ?:

?code=%FE%00%FE

Nous utilisons plusieurs serveurs avec lesquels nous l'utilisons. Sur certains serveurs, la chaîne est passée correctement dans le programme PHP dans $_GET['code'] et peut être décodée comme prévu. Sur d'autres serveurs, la présence de %00 dans la chaîne entraîne la suppression de la chaîne $_GET['code'].

Y a-t-il un paramètre ou un aspect de niveau d'application qui affecte ceci?

La chaîne de requête fonctionne sur cette pile: Apache 2.4.10 - PHP 5.5.24

La chaîne de requête est vide sur cette pile: Apache 2.4.12 - PHP 5.6.9

1
Jeffrey Simon

Comme @closetnoc le suggère, la présence du caractère NULL dans une URL pourrait ​​être considérée comme la source d'une attaque (que le logiciel soit vulnérable ou non est une autre affaire), de sorte que certains serveurs se protègent activement contre this (cependant, je ne suis pas au courant de sa mise en œuvre au core). RFC3986 - Identificateur de ressource uniforme (URI): Syntaxe générique fait spécifiquement référence à ceci:

Notez toutefois que le codage en pourcentage "% 00" (NUL) peut nécessiter un traitement spécial et doit être rejeté si l'application ne s'attend pas à recevoir de données brutes au sein d'un composant.

Sur mon serveur, toute URL contenant %00 dans la chaîne de requête est activement bloquée avec mod_security et un message 403 Forbidden est servi!

Cependant, si vous transmettez des données binary dans la chaîne de requête - ce qui est conçu pour textual data - alors il devrait être codé en base64 en premier (pour le convertir en texte brut) avant ​​étant une URL (pourcentage) codée pour la transmission dans l'URL.


J'ai trouvé ceci rapport de bogue PHP # 53767 (bien que considéré comme "pas un bogue") à partir de 2011-01-17 pour PHP 5.3.4 où le paramètre URL semble être entièrement supprimé du tableau $_GET lorsque la valeur contient %00.

En fait, Rasmus lui-même répond et dit:

Impossible de reproduire. Exécutant probablement un code non standard PHP qui le fait.

1
MrWhite