PHP 8.6.0 Beta 3 is available for testing

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.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top