Dentro de uma linguagem de programação, eu executo um comando shell simples
cd var; echo > create_a_file_here
com var sendo uma variável que contém uma string de (espero) um diretório para o local onde eu quero criar o arquivo "create_a_file_here". Agora, se alguém vir esta linha de código, é possível explorá-la atribuindo, por exemplo:
var = "; rm -rf /"
As coisas podem ficar bem feias. Uma maneira de evitar o caso acima seria talvez pesquisar na string var vários caracteres especiais como ';' antes de executar o comando shell, mas duvido que isso abranja todas as explorações possíveis.
Alguém sabe uma boa maneira de garantir que "cd var" mude apenas um diretório e nada mais?
shou criando sua própria linguagem de programação com uma sintaxe semelhante, mas que se expande em varvez de exigir que você escreva cd "$var"? Ou isso é bashcom shopt -s cdable_vars? Ah, acho que você quer dizer que outro programa bifurca um shell para executar esses comandos. Então, basta citar var, mas certifique-se que não inclui em si um caracter de aspas ...
s='"'; echo "$s"impressões ".
var=untrusted stringno programa pai, também varé uma variável de ambiente que já está definida ao chamar sh. Então, você só precisa citá-lo toda vez que o expandir, o que é possível de forma confiável. Ah, vejo que idéia já é parte da resposta de Stéphane> <.
varcomo argumento. Por exemplo, chamandoshcom argumentos-c,'cd "$1"; echo > create_a_file_here','sh',varobras e não precisa de qualquer alteraçãovar. O'sh'argumento é passado como$0.