0

コマンドの引数の一部にユーザー入力がある場合は、system()ではなくfork()/ exec()/ wait()を使用するため、ユーザーは次のようなものを入力できません...

&rm -rf /home/* && echo HAHA

...引数として。

popenはsystem()と同じくらい危険だと思います。これは、execファミリーの関数のように文字列のリストではなく、単一の文字列を受け取るためです。

ただし、exec関数からのみ戻り値を取得できます。ユーザー入力で実行し、親プロセスでstdout / stderrを処理できる「安全な」バージョンのpopenはありますか?

4

1 に答える 1

3

安全な方法は、pipe()直接呼び出しを使用して、必要なパイプを自分で設定することです。

これpopen()は内部で行われることですが、子プロセスを実行するためにシェルも呼び出します。そのステップをスキップすると、より安全になります。

于 2012-05-03T13:06:21.033 に答える