Stavo leggendo sulla create_function , che sarà DEPRECATED su PHP 7.2, che è incline all'input del comando php. Ho iniziato a giocarci e ho creato un esempio.
Il codice seguente dovrebbe restituire la versione in caratteri minuscoli di ciascuna stringa nell'array.
La mia domanda è, perché usare la funzione 'array_walk_recursive' sembra risolvere il codice di iniezione in questo caso?
Uso legittimo della funzione
<?
$arr = ['HELLO'];
array_walk_recursive(
$arr,
create_function('&$value, $key', '$value = strtolower($value);')
);
print_r($arr);
?>
Array
(
[0] => hello
)
Tentativo di inserire il comando ma il codice PHP non viene valutato. Una stringa viene restituita
<?
$arr = ['PHPINFO();'];
array_walk_recursive(
$arr,
create_function('&$value, $key', '$value = strtolower($value);')
);
print_r($arr);
?>
Array (
[0] => phpinfo();
)
Sto cercando di mettere il phpinfo () all'interno di create_function
(nota che phpinfo è in esecuzione. L'avviso proviene da una sandbox 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
)*