2009-07-23 6 views
2

私はユーザーが私のPHPクラスをテストできるようにしたい、とりわけ画像を切り抜き、サイズ変更することができます。テキスト入力をPHPとして解釈する

私は、テキストフィールドにPHPコードを書いてフォームを送信して、そのコードを実行します。これどうやってするの?

また、ユーザー(誰でも)がPHPクラスをデモできるようにするのは他の安全な方法ですか?

+1

ユーザーにPHPコードを実行させることは安全な方法ではありません。 – RaYell

答えて

4

はい。 PHPでeval文を使用することができます(John http://us2.php.net/manual/en/function.eval.phpで先にリンクされています)。しかし、非常に注意してください。あなたは本当にユーザーがマシン上でコードを自由に実行できるようにしたくありません。

私の推薦は、デモを行うには別のアプローチを思い付くしようとする - おそらく柔軟な例をいくつか...しかし、彼らがコードを実行させてはいけない直接

+3

ええ、誰もがeval()を使うのは怖いと言っています。彼らはそれをさせてくれませんでした!私はちょうど2つのデモを作ろうと思う! –

1

あなたはおそらくevalを使用することができますhttp://us2.php.net/manual/en/function.eval.php

+1

これはうまくいくが、非常に危険です。 –

+3

それは非常に危険ではない、それは非常に危険です。 –

+0

予防措置を講じないと危険です。 –

5

私は、ユーザーアカウントを使用してPHPのプロセスを生成しますnext-to-no権限を使用します。読み取りと書き込みのアクセス権を1つのディレクトリに与えますが、それだけです。

あなたは無限ループなどでDoS攻撃を行っていますが、絶対に行う必要がある場合は、IEやChromeのような非常に低い権限のサンドボックスでコードを実行してください。

EVALの使用はおそらく最悪の考えです。

+0

VMで信頼できないコードを実行すると、無限ループなどは問題になりません。 –

3

はeval()関数を使用しますが、ではありません。真剣に。

古いユーザーに自分のPHPをサーバー上で実行させる「安全な」方法はありません。潜在的な怪我の世界に身をさらしています。

代わりに、優れたドキュメント、コードサンプル、および自分のデモのソースを提供し、潜在的なユーザーが自分のテスト/開発サーバーで試してみるよう奨励します。

2

すでに述べたように、eval機能を使用できますが、非常に危険です。ユーザーがコードをテストするようにするには、使用可能なデモページを準備します。たとえば、ユーザーがHTMLフォームを使用してパラメータを追加することもできます。

0

PHPやその他の汎用言語に関して、画像処理のドメインで操作を表現するのに十分な最小限の言語を考えないでください。ユーザーはこのドメイン固有言語(DSL)で式を送信し、これらの式はサーバー側で解析され、コードに渡されます。

最初に重要なことは、画像処理操作の範囲とそれらをどのように組み合わせるかについて考えることです。それは、どのように表現力豊かなものになるのかを教えてくれるでしょう。一度それを試してみたら、言語がどのように構文的に見えるかについて多くの選択肢があります。言語の構文は、使いやすさと解析の容易さとの間のトレードオフに依存することがあります。

この種の式のパーサーを作成したり見つけたりできるのであれば、ユーザーにとっては最も簡単かもしれません。実際には、誰かがこのようなケースで動作する既存の式評価ツールを推奨できますか(例えば、Smartyがユーザーが提出した式を安全に実行できるかなど)、あるいは実際にはPHPのパーサージェネレータですか?

resize(rotate("foo.png", 90), 50) 

thisのような言語では、ユーザーにはあまり簡単であるかもしれないが、それはかなり単純なスタックマシンを使用して処理することができます。

"foo.png" 90 rotate 50 resize 

でも簡単に、このようなXMLベースの言語にはありませんたとえば、誰かが無数の画素Aに画像のサイズを変更するには、上記の言語を使用するかもしれないため、ドメイン固有の攻撃からあなたを保護することはできませんDSLを使用して

<resize percent="50"><rotate degrees="90"><img src="foo.png"></rotate></resize> 

:独自のパーサを必要としますすべてのサーバーメモリを使い切ってください。だから、ユーザが提出したスクリプトが使用できるリソースの量に制限を加えるDSLの実行環境がなければなりません。

0

evalを使用できますが、予防措置はありません。

「被害妄想」とは対照的に、セキュリティ上の懸念は、単に「慎重」であれば、あなたはいくつかのオプションがあります:あなたはちょうどあなたのこのプロジェクトのために、専用のApache/PHPのインスタンスを持っている場合は

  • を、セットphp.iniのdisable_functionsオプションをオフにし、ファイルとネットワークに関連するすべての機能をオフにします。これはPHPのインストール全体に影響を与え、phpmyadminのようないくつかの驚くべきことを打ち破ります。
  • 専用サーバをお持ちでない場合は、「ru​​nkit」を試してください:http://php.net/manual/en/book.runkit.phpを実行して、すでに実行中のスクリプト内でのみ機能を無効にしてください。
  • おそらくもっと機能しますか?ホストOS内から積極的にファイアウォールされた仮想マシン(VirtualBox、VMwareなど)を最小限のメモリとディスクスペースの割り当てでセットアップし、そこで信頼できないコードを実行します。

アップロードしたすべてのコードの承認プロセスを編集する場合は...

関連する問題