0

最近、bash スクリプトで引用符で囲まれていないパラメーターを使用するのは危険であると読みました。SQLクエリに関してはエスケープが不可欠であることは知っていますが、次のコードには問題は見られません(明らかなディレクトリトラバーサルを除いて)

#!/bin/bash

MYDIR="/tmp/$1"

if [ -d $MYDIR ] ; then
    /bin/rmdir $MYDIR
fi

割り当て行の見積もりはすでに十分ですか?

可能と思われる唯一のことは、「if」行が言うことです

# ./mm.sh "arg1 arg2"
./mm.sh: line 5: [: /tmp: binary operator expected

しかし、それは私にはあまり危険に思えません。見逃したものはありますか?

編集:より具体的に。を使用してこれを実行するときに権限を昇格させる方法はありますsudo mm.shか?

よろしく、

ルーカス

4

2 に答える 2

1

rmdir空でないディレクトリを削除することを拒否するため、スクリプトが実際に壊滅的な影響を与える可能性は低いです。それでも、電話をかけたときに何が起こるかを理解しようとするかもしれません

./mm.sh ' -o -n /home/lukas/xyz'
于 2013-05-17T16:51:09.477 に答える
1

/tmp/foo barわかりました、スペースを含むディレクトリがある場合はどうなりますか?

引用符なしで、この方法で引数を渡す場合:./mm.sh foo bar

スクリプトがチェック/tmp/fooし、本当に がある場合/tmp/fooは削除されますが、これは望ましくありません。

危険とは必ずしも何かが予期せず削除されることを意味するわけではありません。引用しないと、スクリプトはパラメーターを解析して間違って使用します。あなたの例のように実行を停止する可能性があり、実行される可能性がありますが、正しくありません。スクリプトが重要なレポートを生成するが、間違っているかどうかを考えてみてください。危険じゃない?

于 2013-05-17T16:52:23.037 に答える