Dentro de un lenguaje de programación, ejecuto un comando de shell simple
cd var; echo > create_a_file_here
con var es una variable que contiene una cadena de (con suerte) un directorio al lugar donde quiero crear el archivo "create_a_file_here". Ahora, si alguien ve esta línea de código, es posible explotarla asignando, por ejemplo:
var = "; rm -rf /"
Las cosas pueden ponerse bastante feas. Una forma de evitar el caso anterior sería quizás buscar en la cadena en var algunos caracteres especiales como ';' antes de ejecutar el comando de shell, pero dudo que esto cubra todos los posibles exploits.
¿Alguien sabe una buena manera de asegurarse de que "cd var" solo cambie un directorio y nada más?
sho estás creando tu propio lenguaje de programación con una sintaxis similar pero que se expande en varlugar de requerir que escribas cd "$var"? ¿O es esto bashcon shopt -s cdable_vars? Oh, creo que quiere decir que algún otro programa bifurca un shell para ejecutar estos comandos. Así que solo cita var, pero asegúrate de que no incluya un personaje de cita en sí ...
s='"'; echo "$s"impresiones ".
var=untrusted stringen el programa padre, por lo que vares una variable de entorno que ya está establecida al invocar sh. Entonces solo necesita citarlo cada vez que lo expande, lo cual es posible de manera confiable. Ah, veo que esa idea ya es parte de la respuesta de Stéphane>. <
varcomo argumento. Por ejemplo, llamandoshcon argumentos-c,'cd "$1"; echo > create_a_file_here','sh',varobras y no necesita ningún cambiovar. El'sh'argumento se pasa como$0.