Por que eval "ls -l $filename" é perigoso quando filename vem de um usuário?
eval "ls -l $filename"
filename
eval analisa novamente a string construída como código do shell, permitindo que a entrada introduza comandos adicionais.
eval
O comando read executa cada linha antes de atribuí-la à variável.
read
eval restringe a string aos argumentos de ls, portanto a sintaxe extra do shell é ignorada.
ls
ls -l executa automaticamente whoami sempre que um nome de arquivo é inválido.
ls -l
whoami