web-dev-qa-db-ja.com

引用符なしでエコーを実行することは危険ですか?

同様のトピックをいくつか見ましたが、それらは変数を引用しないことを指しているため、望ましくない結果につながる可能性があることがわかっています。

私はこのコードを見て、このコード行が実行されたときに実行される何かを注入することが可能かどうか疑問に思っていました:

echo run after_bundle

11
Viktor Fonic

特定のケースについて

echo run after_bundle

引用は必要ありません。 echoの引数は変数展開やコマンド置換などを含まない静的文字列であるため、引用符は必要ありません。これらは「2語だけ」です(そして Stéphaneが指摘 のように、 ポータブル文字セット )からさらに構築されます。

「危険」は、シェルが展開または解釈する可能性がある変数データを処理するときに発生します。そのような場合、シェルが正しいことを行い、その結果が意図したものになるように注意する必要があります。

次の2つの質問には、それに関連する情報が含まれています。


echoは、このサイトの回答で潜在的に有害なコマンドを「保護」するために使用されることがあります。たとえば、ファイルを削除したり、新しい宛先にファイルを移動したりする方法を示します

echo rm "${name##*/}.txt"

または

echo mv "$name" "/new_dir/$newname"

これにより、実際にファイルを削除したり名前を変更したりする代わりに、端末にコマンドを出力します。次に、ユーザーはコマンドを検査し、問題がないと判断し、echoを削除して再度実行します。

あなたのコマンドecho run after_bundleは、ユーザーへの指示である場合と、「コメントアウトされた」コードであり、危険すぎて結果を知らずに実行できない場合があります。

このようにechoを使用すると、変更されたコマンドが何をするかを知る必要があり、変更されたコマンドが実際にis安全であることを保証する必要があります(それはリダイレクトが含まれていて、パイプラインで使用しても機能しないなどの可能性がありますない

17
Kusalananda