0

Webページに、ユーザーがacプログラムを貼り付けるテキストエリアがあります。サーバー側では、このコードを適切にファイルに保存します。shell_exec()関数を使用してgccを呼び出し、cプログラムを実行します。これは正常に機能します。そして、実行部分もそうです。

しかし、ユーザーが(意図せずに)無限ループを発生させた場合はどうなるでしょうか。関数を使うと-

     shell_exec("./a.out")

プログラムは無限ループに入ります。phpスクリプト自体からこのようなループから抜け出すにはどうすればよいですか?方法はありますか?

4

1 に答える 1

0

ulimitを使用してCPU使用率を制限しますか?これはプロセスごとであるため、ユーザーがプロセスを継続的に「フォーク」すると、問題が発生する可能性があることに注意してください。

もう1つの方法は、子プロセスをすべて監視して強制終了するラッパープロセスを用意し、それによってa.outを開始することです。それはあなたがあなたの「クライアント」を信頼できるかどうかに依存します(例えば彼らはあなたの良い友達なのか、これは学校のプロジェクトか公開ウェブサイトなのか)-あなたのパラノイアレベルは脅威レベルによって増加するはずです。

より高度なセキュリティが必要な場合は、仮想マシンでsshを介してプロセスを実行します。次に、X秒後に仮想マシンを強制終了し、保存されたスナップショットから新しい仮想マシンを開始します。(VMのプールを実行する準備ができている可能性があるため、ユーザーはVMのロードを待つ必要はありません)

于 2012-12-21T10:25:40.623 に答える