スクリプトで外部入力を評価する「eval」の不安定性をどのように処理しますか?

スクリプトで外部入力を評価する「eval」の不安定性をどのように処理しますか?

バイナリーシマウマ

スクリプトは外部入力を評価しますが、これは非常に安全ではありません。

eval評価スクリプトで外部入力を処理または置換する方法はありますか?

ありがとうございます。

答え1

に渡された引数が外部入力から来ていないことを確認してくださいeval。それ以外の場合は事前に削除しました。

次のようにしないでください。

n=0
....
n=$((n + 1))
eval "var$n=$1"

$n下にあなたのコントロール、内容は$1そうではありません。たとえば、その場合、$1evalは解釈するコードを受け取り、再起動します。foo;rebootvar3=foo;reboot

使用:

eval "var$n=\$1"

そうすれば逆にevalなりますvar3=$1。良いことです。

eval "$1=\$2"

また、間違っている可能性があります。保証する必要があるのは、コンテンツが$1許容可能な値のセット(衛生的に処理されている)からのみ出てくることです。

unset -v var1 foo bar
case $1 in
  (var1 | foo | bar) eval "$1=\$2";;
  (*) echo >&2 unexpected variable name; exit 1;;
esac

これは任意のコードを評価する唯一のコマンドではevalありません。shperlawksedreadexporttypesetprintftest[

関連情報