私は、ユーザーに私のPHPクラスをテストしてもらいたいと思っています。これは、とりわけ画像のトリミングとサイズ変更を行います。
私は彼らにテキストフィールドにPHPコードを書いて、フォームを送ってもらいたいのです。そうすれば彼らのコードが実行されます。これどうやってするの?
それとも、ユーザー(誰でも)がPHPクラスをデモできるようにする他の安全な方法ですか?
私は、ユーザーに私のPHPクラスをテストしてもらいたいと思っています。これは、とりわけ画像のトリミングとサイズ変更を行います。
私は彼らにテキストフィールドにPHPコードを書いて、フォームを送ってもらいたいのです。そうすれば彼らのコードが実行されます。これどうやってするの?
それとも、ユーザー(誰でも)がPHPクラスをデモできるようにする他の安全な方法ですか?
ほとんど権限のないユーザー アカウントを使用して PHP プロセスを生成します。単一のディレクトリへの読み取り/書き込みアクセスを許可しますが、それだけです。
無限ループなどによる DoS 攻撃にさらされ続けていますが、どうしてもそうしなければならない場合は、IE や Chrome のように、この非常に低い権限のサンドボックスでコードを実行してください。
EVAL を使用するのはおそらく最悪の考えです。
はい。php で eval ステートメントを使用できます (John http://us2.php.net/manual/en/function.eval.phpによって以前にリンクされています) が、十分に注意してください。ユーザーが自分のマシンでコードを自由に実行できるようにすることは本当に望ましくありません。
私の推奨事項は、デモを行うための別のアプローチを考え出すことです-おそらく柔軟ないくつかの例...しかし、それらにコードを直接実行させないでください
eval() 関数を使用できますが、使用しないでください。真剣に。
古いユーザーがサーバー上で独自の PHP を実行できるようにする「安全な」方法はありません。あなたは潜在的な傷の世界に身をさらしています。
代わりに、優れたドキュメント、コード サンプル、および独自のデモ用のソースを提供し、潜在的なユーザーが独自のテスト/開発サーバーで試してみることを奨励してください。
既に述べたように、関数を使用することはできますがeval
、非常に危険です。ユーザーにコードをテストしてもらいたい場合は、可能な使用方法を提示するデモ ページを用意します。たとえば、HTML フォームを介してユーザーがパラメーターを追加できるようにします。
evalを使用できますが、注意が必要です。
セキュリティ上の懸念が「偏執的」ではなく単に「慎重」である場合は、いくつかの選択肢があります。
あなたが偏執的であるなら... アップロードされたすべてのコードの承認プロセスをセットアップしてください。
PHP やその他の汎用言語の観点から考えるのではなく、画像処理のドメインで操作を表現するのに十分な最小限の言語を考えてください。ユーザーはこのドメイン固有言語 (DSL) で式を送信します。これらの式はサーバー側で解析され、コードに渡されます。
最初に重要なことは、画像処理操作の範囲とそれらをどのように組み合わせることができるかを考えることです。それは、その言語がどれほど表現力豊かでなければならないかを教えてくれます。それを解決したら、言語が構文的にどのように見えるかについて多くの選択肢があります。言語の構文は、使いやすさと解析のしやすさのトレードオフに依存する場合があります。
この種の式のパーサーを作成または見つけることができれば、ユーザーにとって最も簡単なパーサーになる可能性があります。実際、このような場合に機能する既存の式エバリュエーター (たとえば、Smarty はユーザーが送信した式を安全に実行できますか?)、または PHP 用のパーサー ジェネレーターを推奨できる人はいますか?
resize(rotate("foo.png", 90), 50)
このような言語はユーザーにとって使いにくいかもしれませんが、かなり単純なスタック マシンを使用して処理できます。
"foo.png" 90 rotate 50 resize
さらに簡単なことに、このような XML ベースの言語には独自のパーサーは必要ありません。
<resize percent="50"><rotate degrees="90"><img src="foo.png"></rotate></resize>
DSL を使用しても、ドメイン固有の攻撃から保護されません。たとえば、誰かが上記の言語を使用して画像のサイズを無数のピクセルに変更し、サーバーのメモリをすべて使い果たす可能性があります。そのため、ユーザーが送信したスクリプトが使用できるリソースの量を制限する、DSL 用のある種のランタイム環境が必要になります。