ユーザーから取得した filename を使う場合、なぜ eval "ls -l $filename" は危険ですか?
filename
eval "ls -l $filename"
eval は文字列を ls の引数に制限するため、追加のシェル構文は無視されます。
eval
ls
ファイル名が無効な場合、ls -l は自動的に whoami を実行します。
ls -l
whoami
read コマンドは、変数に代入する前にすべての行を実行します。
read
eval は構築された文字列をシェルコードとして再解析するため、入力によって追加のコマンドを挿入できます。