当 filename 来自用户时,为什么 eval "ls -l $filename" 很危险?
filename
eval "ls -l $filename"
read 命令会在将每一行赋给变量前执行它。
read
eval 会将构造出的字符串重新解析为 shell 代码,因此输入可以注入其他命令。
eval
eval 会将字符串限制为 ls 参数,因此会忽略额外的 shell 语法。
ls
当文件名无效时,ls -l 会自动运行 whoami。
ls -l
whoami