VULNERABILIDADES DE APLICACIONES WEB: CÓMO PREVENIR LA INYECCIÓN DE COMANDOS

21.12.2017 11:10
Si bien esta vulnerabilidad no es ni por lejos exclusiva del lenguaje PHP, daremos un ejemplo de cómo prevenirla en el mismo. Consideremos el siguiente código vulnerable:
 
<?php
$nombreDirectorio = $_POST["nombre"];
$comando = 'mkdir "Usuarios\"' . $nombreDirectorio;
system($comando);
?>
 
La función system() ejecuta un programa externo y muestra su salida. En nuestro caso ejecutaría el comando "mkdir" (es el mismo para Linux que para Windows), creando una directorio con el nombre del usuario.
 
El problema es que si ingresamos como parámetro
 
Juan & dir (ó ls en Linux)
 
además de crear el directorio nos mostraría los archivos y subdirectorios del directorio actual.
 
Una solución posible (en este caso probablemente sea la mejor) es prescindir del comando del sistema operativo y reemplazarlo por la función mkdir() de PHP.
 
<?php
mkdir('Usuarios' . '/' . $_POST["nombre"]);
?>
 
En el segundo ejemplo no hay Inyección de Comandos posible.