Comment la marque de corruption se propage
PHP Manual
PHP Manual»Propagation et vérifications»Comment la marque de corruption se propage

La marque de corruption est un bit unique stocké sur la chaîne elle-même, pas sur la variable qui la contient. Assigner, passer ou partager une chaîne corrompue conserve la marque. La concaténation et l'interpolation de chaînes la propagent également :

Opérateurs qui propagent la marque de corruption
= (assignement, y compris list()/déstructuration de tableau)
. (concaténation)
.= (assignement de concaténation)
"{$var}" (interpolation de chaîne, y compris le chemin rapide ROPE)

De plus, taint comprend un ensemble fixe de fonctions de chaînes : lorsque l'un des arguments de chaîne concernés est corrompu, la chaîne retournée est également marquée comme corrompue. L'appel normal et, sur PHP 8.4+, l'appel rapide sans cadre (frameless) sont tous deux couverts.

Fonctions qui propagent la marque de corruption
trim(), rtrim(), ltrim()
substr(), strstr()
str_replace(), str_ireplace()
str_pad(), strtolower(), strtoupper(), strval()
explode() (chaque élément du tableau résultant)
implode()/join() (un séparateur corrompu corrompt également le résultat)
sprintf(), vsprintf() (seul le spécificateur %s transporte la marque ; sprintf("%d", $t) retourne une chaîne propre)
dirname(), basename(), pathinfo()

Toute fonction que taint ne comprend pas explicitement retourne une chaîne neuve et non marquée -- y compris les fonctions d'échappement telles que htmlspecialchars(), htmlentities() ou mysqli_real_escape_string(). C'est délibéré : taint sur-rapporte plutôt que d'essayer de décider si une valeur est sûre pour un contexte de sortie particulier. Utiliser untaint() pour effacer la marque sur des valeurs que l'on a validées soi-même.

To Top