8

私はブラウザベースのPHPIDEのアイデアを検討しており、ブラウザを介してコマンドラインをエミュレートする可能性について興味がありますが、CLIが実行できるものかどうかを知るためのツールの開発に精通していません。簡単に、またはまったく。もう少し調査したいのですが、今のところあまり多くの資料を見つけることができていません。

大まかに言えば、私の最初の本能は、AJAXを介してコマンドをPHPスクリプトにフィードし、出力をページに返すテキスト入力を設定することです。私はCLIに精通していないため、そのコンテキストでCLIとインターフェイスする方法を理解できません。

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

編集:これのユースケースは、ローカルホストまたは開発サーバーであり、公開サイトではありません。

4

4 に答える 4

2

この関数をRPCまたはjavascriptからの直接POSTを介して呼び出します。これにより、次の順序で処理が実行されます。

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

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

一時的なスクリプトを実行するphp.iniおよびphpプロセスには、厳格で偏執的なセキュリティが必要です(念のため、ネットワーク/インターネットアクセスがなく、状態が1時間ごとに工場に戻される別のマシンで分離することもできます)。 。

使用しないでくださいeval()。このシナリオには適していません。攻撃者はアプリケーションに飛び込んで、現在の権限と変数の状態を使用する可能性があります。

于 2012-07-24T15:07:40.980 に答える
1

基本バージョンは

  1. スクリプトは、行入力を含むフォームを出力します
  2. フォームアクションはスクリプトを指します
  3. スクリプトはフォームの入力を受け取り、それをevalに渡します
  4. evalからの出力をブラウザに渡します
  5. フォームを再度出力する

問題は、定義された関数と変数が各リクエスト間で失われることです。

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

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

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

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

このデーモンを2つのFIFOデバイス(1つは入力用、もう1つは出力用)に接続し、simpleを介して通信することができますfopen

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

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

于 2012-07-21T23:17:39.737 に答える
1

最近、Javascript php.jsで記述されたPHPインタープリターについて読んだので、ブラウザーのみを使用してPHPコードを記述および実行できます。これが最終的に必要なものかどうかはわかりませんが、面白そうです。

于 2012-07-28T10:06:59.080 に答える
1

私たちは大学でラボサーバーにsshアクセスするためのいくつかの製品をテストし、いくつかのWeb-SSH-Toolsを使用しました-それらは基本的にあなたが望むことを正確に実行します。Shell-In-A-Box -Projectは、任意のインタープリターにバインドでき、必要に応じてインタラクティブなphp-interpreterで使用できます(デモページでは、basic-interpreterを使用していました)。このプロジェクトは、真のPHP-IDEの基盤として役立つ可能性があります。これらには、コンソールベースのエディター(vi、emacs、nanoなど)と対話できるだけでなく、管理コマンド(フォルダーの作成、所有権やACLの変更、サービスの再起動など)を提供できるという利点があります。

Mozillaには、 Bespinと呼ばれるフル機能のWebベースのIDEもあります。これも、高度に拡張可能で構成可能です。

あなたが述べたように、ページは一般向けではないので、もちろん、セッションハイジャックに対抗するために認証とSSLでページを保護する必要があります。

于 2012-07-28T15:36:05.640 に答える