estoy codificación de una interfaz web para una pieza de software horrible propiciatoria utiliza nuestra empresa. El software no tiene una interfaz de usuario real y nos exige dar acceso masivo a nuestro sistema para que nuestros clientes incluso obtengan datos. Mi interfaz web debe ejecutar una función exec();
y debe pasar algunas variables a las entradas del usuario.mejor manera de desinfectar comando exec con variables insertadas por el usuario
$command = "report-call '$type' '$study' '$server' '$tag' '$specopt1' '$specopt2' '$specopt3' '$specopt4'";
$last_line = exec($command, $output, $returnvalue);
Ahora supongamos que podría ser capaz de eliminar cualquier punto y coma desde el $command
varible y estar seguro, pero no estoy seguro y es por eso que estoy posando esto aquí antes de seguir en directo el próximo mes.
¿Cuál sería la mejor manera de desinfectar $command
? Hay algunos caracteres especiales que debo incluir en las variables [ ] < > ! # $
.
eliminado mi respuesta porque al parecer, que estaban escribiendo al mismo tiempo, pero se dieron ejemplos dignos. Enlaces a Manual: http://us.php.net/manual/en/function.escapeshellarg.php, http://us.php.net/manual/en/function.escapeshellcmd.php –
Gracias, @AC - agregando los enlaces ahora – gahooa
Solo una nota que 'escapeshellcmd()' en realidad no escapa '!', así que si está ejecutando el comando en, por ejemplo, Bash, aún eres vulnerable a la sustitución de comandos (por ejemplo, 'this-is-a-test-! 467' donde'! 467' será reemplazado por lo que sea que no. 467 en tu historial de shell). 'escapeshellarg()' alivia eso. – madsen