Estaba leyendo sobre create_function , que se DEPRECTA en PHP 7.2, que es propenso a la inyección de comandos php. Comencé a jugar con él y creé un ejemplo.
El código a continuación debe devolver la versión en minúscula de cada cadena en la matriz.
Mi pregunta es: ¿Por qué usar la función 'array_walk_recursive' parece arreglar la inyección de código en este caso?
Uso legítimo de la función
<?
$arr = ['HELLO'];
array_walk_recursive(
$arr,
create_function('&$value, $key', '$value = strtolower($value);')
);
print_r($arr);
?>
Array
(
[0] => hello
)
Intentando inyectar el comando pero el código PHP no se evalúa. Se devuelve una cadena
<?
$arr = ['PHPINFO();'];
array_walk_recursive(
$arr,
create_function('&$value, $key', '$value = strtolower($value);')
);
print_r($arr);
?>
Array (
[0] => phpinfo();
)
Intentando poner el phpinfo () dentro de create_function
(Tenga en cuenta que se ejecutó phpinfo. La advertencia proviene de un sandbox de php)
<?
$arr = ['anything'];
array_walk_recursive(
$arr,
create_function(
'&$value, $key',
'phpinfo(); $value = strtolower($value);'
)
);
print_r($arr);
?>
*<b>Warning</b>: phpinfo() has been disabled for security reasons in <b>[...][...](32) : runtime-created function</b> on line <b>1</b><br />
Array
(
[0] => anything
)*