1

Amazon ec2 インスタンス (Linux) があります。

PHP ファイルをアップロードして、www.mydomain.com/yourname で公開できるようにしてほしいと思います。また、他の多くの人 (www.mydomain.com/theirname) に対してもこれを実行できるようにしたいと考えています。

私は、あなた (または彼ら、指を向けないようにしましょう) が悪意のあることを (故意にまたは誤って) 行う可能性があることを心配しています。たとえば、無限ループ、ルート ディレクトリ外での読み書き、サーバーのダウン、システム コマンドの実行などです。

PHP/Apache/ユーザー権限を設定する方法、またはコードを提供する前にコードを検索して、悪意のあることを少なくともはるかに困難にする方法はありますか?

4

3 に答える 3

8

とりわけ、これを含めるように PHP.ini を調整する必要があります。

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

これにより、この .ini を使用する PHP ファイル内でこれらの関数が実行されなくなります。

また、 open_basedirサポートを有効にして、ユーザーを自分のディレクトリ内にロックダウンして、次のようなものを使用できないようにします。

require_once '../../another_user/index.php';

また

$notMyFile = file_get_contents('../../another_user/config.php');

于 2012-08-27T17:55:07.597 に答える
5

これを行う防弾方法はありません。

まず、システムコールはありません。

次に、各スクリプトのタイムアウト。

また、何か問題が発生した場合にプラグを抜くことができるように、外側の「終了ボタン」を手元に置いておくことをお勧めします。

PHP は非常に大きな言語であり、サーバー上で他のユーザーにコードを実行させることは、安全に行うのが非常に困難です。

于 2012-08-27T17:55:52.730 に答える
1

Runkitサンドボックスをご覧ください

Runkit_Sandbox クラスをインスタンス化すると、独自のスコープとプログラム スタックを持つ新しいスレッドが作成されます。コンストラクターに渡される一連のオプションを使用すると、この環境は、プライマリ インタープリターが実行できることのサブセットに制限され、ユーザー提供のコードを実行するためのより安全な環境を提供します。

http://php.net/manual/en/runkit.sandbox.php

サンドボックス環境に提供するリソースはすべて悪用される可能性があり、最終的には悪用されることに注意してください。たとえば、ユーザーが互いの結果に影響を与えることができないようにする必要があり、ユーザーにデータベースを提供する場合は、それぞれのサンドボックスで異なる資格情報を持つ異なるデータベースを提供します。

于 2012-08-27T17:56:19.027 に答える