2012-07-19 2 views
8

私はブラウザベースのPHP IDEの考え方を検討しており、ブラウザからコマンドラインをエミュレートできるかどうか不思議ですが、CLI用の開発ツール簡単に、あるいはまったく行うことができるかどうかを知ることができます。私はもう少し調査をしたいと思いますが、これまでに非常に多くのリソースを見つけることができていません。ブラウザでPHPのCLIをエミュレートする

高いレベルから、私の最初の本能は、AJAXを介してPHPスクリプトにコマンドを送り、出力をページに返すテキスト入力を設定することです。私は、そのコンテキストでCLIとのインターフェース方法を知るために、CLIに十分な知識はありません。

私は実際のコードは必要ありませんが、それも便利ですが、私はさらに調査する必要がある関数、クラスまたはAPIのうちのいくつかを探しています。理想的には、サードパーティのライブラリではなく、PHPに焼いたもの(PHP 5.3を前提としています)を好むでしょう。どのようにこれに取り組んでいますか?私が知るべき資源やプロジェクトはありますか?

を編集します。これは、公開サイトではなく、ローカルホストまたは開発サーバーになる場合があります。

+1

[REPL Environment for the Web](http://stackoverflow.com/questions/5918670/repl-environment-for-the-web) –

+0

@ IgnacioVazquez-Abrams - 複製はできません。私は自分でビルドしようとしていますが、サードパーティのツールを利用していません。 PHPのための唯一の答えは、pythonで書かれたphpshです。実際にPHPでビルドするのには役立ちません。 – VirtuosiMedia

+0

誰かが 'unlink( '/')'を実行するとどうなりますか? –

答えて

2

この関数を呼び出し、この順番で物事を行いRPCやJavaScriptから直接POSTを、谷:

  • がランダムに(フォルダに(ランダムな名前で)ファイルにPHPコードを書きます名前)、それは単独で座って実行され、実行の終了時に削除されます。
  • 現在のPHPプロセスがは、そのファイル内のコードを実行されません。代わりに、execアクセス権(safe_mode off)を持っている必要があります。 exec('php -c /path/to/security_tight/php.ini')(php - ?を参照)
  • 出力をキャッチしてブラウザに戻します。あなたは奇妙な誤りから保護されています。私はexecの代わりにpopenと言っているので、プロセスを強制終了して、プロセスが終了するのを待つタイムアウトを手動で制御することができます(プロセスを終了させると、ブラウザにエラーを簡単に返すことができます)。

ブラウザから呼び出されたときに実行される通常のPHPプロセスでは、lax/normalセキュリティ(IDEバックエンド全体と同じ)が必要です。

一時的なスクリプトを実行するphp.iniとphpプロセスには、厳密で妄想的なセキュリティが必要です(ネットワーク/インターネットアクセスがなく、毎時工場に戻った状態の別のマシンで念のため)。 eval()を使用しないでください

は、それがこのシナリオには適していません。攻撃者はあなたのアプリケーションに飛び乗って、あなたの現在の権限と変数の状態を利用することができます。

+0

このシナリオでは、PHP変数の値をどのように覚えていますか?各ファイルにはメモリ内のすべてのコンソールコードが含まれているか/実行されていますか?また、あなたが言及したセキュリティ手順のすべてが私の使用事例に当てはまるとは確信していません。私は、公開されているものではなく、ローカルホストまたはdevサーバで使用するためのダウンロード可能なアプリを考えています。 – VirtuosiMedia

+0

変数を代入で設定することができます。 PHPファイルを再実行すると、それらが再割り当てされます...公開されているかどうかは、私の答えに影響しません。あなたの質問には、ブラウザCLIだけ "ダウンロード可能なアプリ"は記載されていません。このブラウザのCLI要件は、インターネット上の種類のものにしか触れません。それにもかかわらず、私の答えはまだlocalhost上で実行可能です。あなたがバインドするものは、答えの妥当性に影響しません。 –

+0

エラーの場合は、最後の行/コマンドの前にロールバックする必要があります。 –

1

基本的なバージョンは

  1. あなたのスクリプトは、ライン入力、スクリプトへ
  2. フォームアクション・ポイントを持つフォームを出力だろうスクリプトは、フォームの入力を受け取り、evalに渡し
  3. ブラウザ
  4. 出力再び形態
へのevalからの任意の出力を渡します

問題は、各要求の間に定義された関数と変数が失われることです。

セッションに入力された各行を追加することはできますか。

$inputline = $_GET['line']; 
$_SESSION['script'] .= $inputline . PHP_EOL; 
eval($_SESSION['script']; 

これにより、各セッションで完全なPHPスクリプトが実行されます(もちろん、完全な出力が得られます)。

もう1つのオプションは、バックグラウンドでサーバー上で実行され、ブラウザからの入力を取得して出力を渡す何らかの種類のデーモン(基本的にはphp -a呼び出しのインスタンス)を作成することです。

このデーモンを2つのFIFOデバイス(入力用と出力用)に接続し、簡単なfopenで通信することができます。

スクリプトを使用している各ユーザーに対して、新しいデーモンプロセスを生成する必要があります。

言うまでもなく、スクリプトを不正使用から保護することが重要です。

1

最近、私はJavascriptをphp.jsで書かれたPHPインタプリタについて読んので、あなたは、あなたのブラウザを使用してPHPコードを記述し、実行する可能性があります。私はこれが最後に必要なものかどうかは分かりませんが、面白いと思います。

+0

+1これについても掲載しようとしていました。 – uzyn

1

我々は、SSH-アクセス私たちの研究室のサーバのための私の大学でいくつかの製品をテストし、Web-SSH-Toolsの一部を使用しました - 彼らは基本的に正確に何をしたいん。 Shell-In-A-Box -Projectは好きなインタプリタにバインドされていてもかまいません。また、インタラクティブなPHPインタプリタで使用することもできます(デモページでは基本的なインタプリタを使用していました)。このプロジェクトは、真のPHP-IDEの基礎となるかもしれません。これらは、管理コマンド(例えば、フォルダの作成、所有権やACLの変更、サービスの再起動など)を行うことができるだけでなく、コンソールベースのエディタ(vi、emacs、nanoなど)とやりとりすることができるという利点もあります。

Mozillaにはフル機能のWebベースのIDE Bespinhighly extensible and configurable)もあります。

あなたが述べたように、そのページは公開されていないため、もちろん、認証とSSLでページを保護してsession hijackingと戦わなければなりません。

関連する問題