1

ユーザーによって制御されているURLの部分を持つサーバーアプリケーションからwgetを呼び出す必要があります。私は、サーバーアプリケーションでsetenv()を使用して、環境変数URLで引数を格納する場合は、その後、私は$URLはどのような方法で展開されていないと、それはの一部として完全に解釈されることを想定することができます引数を環境変数に渡すと、完全に安全ですか?

wget somehost/"$URL" 

フォークシェルで実行URL?これはBourneシェルと互換性がありますか(例えば、Ubuntuのではなくbash)?

+0

サーバーアプリケーションからwgetをどのように実行しますか? 'system()'を使う? – Jens

+0

二重引用符で囲まれた変数は、POSIX互換のシェルによって展開または解釈されるべきではありません。 – PSkocik

+0

考えられる問題:1.生成されたシェルが '.bashrc'をソースすると、そこに' URL'が存在すればピックアップします。 2.異なる 'URL'を持つ複数のプロセスを起動すると、それらのうちのいくつかが誤った 'URL'を取得する可能性があります。 – alvits

答えて

0

シェルは、コマンドを呼び出す(fork/execs)前に、パラメータ拡張$URLを実行します。パラメーターは二重引用符で囲まれているため、単語の分割は行われず、「somehost/whatever URL to expand」は1つの引数になります。

他のユーザーがps(1)コマンド+ argsとして出力すると結果が表示されることがあります。

さらに、システム上のps(1)実装が環境を表示するために-eをサポートしている場合(たとえばFreeBSDの場合)、環境変数に格納されたデータが表示される場合があります。

あなたの質問がこのようにアクセス資格情報などの機密情報を隠すことができますか?答えは一般的に「いいえ」です。

+0

私はちょうどコマンドインジェクションに関係しているので、正しく理解すれば問題ありません。 –

関連する問題