Dutch PHP Conference 2027

Cómo se propaga la marca de corrupción

La marca de corrupción es un único bit almacenado en el propio string, no en la variable que lo contiene. Asignar, pasar o compartir de cualquier otra forma un string corrompido conserva la marca. La concatenación y la interpolación de strings también la propagan:

Operadores que propagan la marca de corrupción
= (asignación, incluyendo list() y la desestructuración de arrays)
. (concatenación)
.= (asignación con concatenación)
"{$var}" (interpolación de strings, incluyendo la vía rápida ROPE)

Además, taint conoce un conjunto fijo de funciones de strings: cuando alguno de los argumentos de tipo string relevantes está corrompido, el string devuelto también se marca como corrompido. Se cubren tanto la llamada habitual como, en PHP 8.4 y posteriores, la llamada por la vía rápida sin marco de pila.

Funciones que propagan la marca de corrupción
trim(), rtrim(), ltrim()
substr(), strstr()
str_replace(), str_ireplace()
str_pad(), strtolower(), strtoupper(), strval()
explode() (cada elemento del array resultante)
implode()/join() (un separador corrompido también corrompe el resultado)
sprintf(), vsprintf() (solo el especificador %s transporta la marca; sprintf("%d", $t) devuelve un string limpio)
dirname(), basename(), pathinfo()

Cualquier función que taint no conozca explícitamente devuelve un string nuevo y sin marcar, incluidas las funciones de escapado como htmlspecialchars(), htmlentities() o mysqli_real_escape_string(). Esto es deliberado: taint informa de más de la cuenta en lugar de intentar decidir si un valor es seguro para un contexto de salida concreto. Se debe usar untaint() para eliminar la marca de los valores que se hayan validado manualmente.

add a note

User Contributed Notes

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