Cuando un string corrompido alcanza uno de los puntos indicados a
continuación, taint emite una advertencia (por defecto un
E_USER_WARNING; el nivel es configurable mediante
taint.error_level).
Solo se inspeccionan los argumentos de tipo string de primer nivel;
volcar un array que simplemente contiene valores corrompidos no genera
ninguna advertencia.
| Punto | Comprobado |
|---|---|
echo, print |
la expresión mostrada o impresa |
| printf(), vprintf() | el string de formato y los valores sustituidos |
| print_r(), var_dump(), var_export() | el valor volcado, cuando es un string |
exit/die con un mensaje |
el mensaje |
file_put_contents(), fwrite(), fputs() hacia php://output |
los datos escritos |
| Punto | Comprobado |
|---|---|
| fopen(), opendir(), unlink() | la ruta |
| file(), readfile(), file_get_contents(), highlight_file()/show_source() | la ruta |
| copy(), rename(), move_uploaded_file() | tanto la ruta de origen como la de destino |
| mkdir(), rmdir(), touch() | la ruta |
include, include_once, require, require_once |
la ruta del fichero |
| Punto | Comprobado |
|---|---|
| mysqli_query(), mysqli_prepare(), mysqli_real_query(), mysqli_multi_query() | el string de la consulta |
| mysql_query(), sqlite_query(), sqlite_single_query(), oci_parse(), pg_query(), pg_send_query() | el string de la consulta |
| mysqli::query(), mysqli::prepare(), mysqli::real_query(), mysqli::multi_query() | el string de la consulta |
| PDO::query(), PDO::prepare(), PDO::exec() | el string de la consulta |
| SQLite3::query(), SQLite3::prepare(), SQLite3::exec(), SQLiteDatabase::query(), SQLiteDatabase::singleQuery() | el string de la consulta |
| Punto | Comprobado |
|---|---|
| exec(), system(), passthru(), shell_exec() (incluyendo el operador de comillas invertidas) | el string del comando |
| proc_open(), popen() | el string del comando |
eval |
el código evaluado |
las llamadas dinámicas como $func(), $obj->$method(), call_user_func() o los callables en forma de array |
el nombre de la función, del método o de la clase que se resuelve |
| preg_match(), preg_match_all(), preg_replace(), preg_split(), preg_grep(), preg_replace_callback() | el patrón (y el nombre de la retrollamada en el caso de preg_replace_callback()) |
| Punto | Comprobado |
|---|---|
| header() | el string de la cabecera |
| setcookie(), setrawcookie() | el nombre y el valor de la cookie |
| Punto | Comprobado |
|---|---|
| unserialize() | el string serializado |
| mail() | el destinatario, el asunto, los parámetros adicionales y las cabeceras adicionales (el cuerpo del mensaje es contenido y no se comprueba) |
Las advertencias siguen el formato
nombre_de_funcion() [punto]: mensaje, donde
punto identifica la operación comprobada (por ejemplo
echo, include o el nombre de la
función) y el mensaje describe lo que se ha encontrado como posiblemente
corrompido.