web-dev-qa-db-ja.com

Process.Startを安全に使用する方法

私は、オーディオ変換に使用されるサーバー上にあるexeを実行するために作成したWindowsサービスで Process.Start を使用しています。このexeにユーザー入力をパラメーターとして渡します。コードは次のようになります。

string filePath = "\ffmpeg.exe";
string parameters =  String.Format(@"-i ""{0}"" -f mp3 ""{1}""", 
                           LocalFileName,
                           tempDirectory + NewFileName);
ProcessStartInfo startInfo = new ProcessStartInfo(ffmpegPath, parameters);
Process proc = Process.Start(startInfo);

変数LocalFileNameおよびNewFileNameは、ユーザー入力から設定されます。 OSインジェクション から保護したい場合は、&文字または私がやるべきことはまだありますか?

5
Abe Miessler

パラメータへの追加の引数文字列から引用符を削除して、コマンドラインに独自の引数を投入できないようにします。

ディスクスペースを使います ./ \文字を削除します。 "\ Windows\Filename"が実際にファイルを ":\ Windows\TempDirName\Filename"に書き込むような攻撃を受けないかのように、後で一時ファイルをクリーンアップする必要がある場合、攻撃者のファイルは別のものになりますあなたがきれいにしようとしているよりも場所。

例えば。 「C:\ AudioConversion\Temp \」が表示されます。攻撃者のファイルの場所は「C:\ Windows\Temp \」です。

ffmpeg.exeには、使用しているバージョンに脆弱性はありますか?このツールに対する脆弱性については、侵入Webサイトを確認してください。このプロセスプロセスに精通している場合は、安全性を高めるために自分自身で行ってください。偏執的であれば、このプロセスでDEPを有効にすることができます。

プログラムでバッファオーバーフローはありますか?はい、安全ではない修飾子を使用したり、ネイティブコールなどを実行したりしないかぎり、確認することはほとんどありません。

3
Paul

コマンドラインを送信するのではなく、パラメータでプロセスを開始しています。 Process.Startの使用は、パラメーター化されたSQLの実行に似ています。

1
N Jones