Эмуляции командной строки в PHP в браузере

Я рассматриваю идею браузерной PHP IDE и интересуюсь возможностью эмуляции командной строки через браузер, но я недостаточно знаком с инструментами разработки для CLI, чтобы знать, если это что-то, что можно сделать легко или вообще. Я хотел бы провести еще одно расследование, но пока не смог найти на него много ресурсов.

с высокого уровня мой первый инстинкт-настроить текстовый ввод, который будет подавать команды на PHP скрипт через AJAX и возвращает любой вывод на страницу. Я не достаточно знаком с CLI, чтобы знать, как взаимодействовать с ним в этом контексте.

Мне не нужен фактический код, хотя это тоже было бы полезно, но я ищу больше функций, классов или API, которые я должен исследовать дальше. В идеале я бы предпочел что-то запеченное в PHP (предположим, PHP 5.3), а не стороннюю библиотеку. Как бы вы справились с этим? Существуют ли какие-либо ресурсы или проекты, которые я должен знать о?

редактировать: прецедентом для этого будет localhost или сервер разработки, а не общедоступный сайт.

4 ответов


вызовите эту функцию через RPC или прямой пост из javascript, который делает вещи в этом порядке:

  • напишите PHP-код в файл (со случайным именем) в папке (со случайным именем), где он будет сидеть один, выполнять, а затем будет удален в конце выполнения.
  • текущий процесс PHP будет не запустить код в этом файле. Вместо этого он должен иметь разрешения exec (safe_mode off). exec('php -c /path/to/security_tight/php.ini') (см. php -?)
  • поймать любую выход и отправить его обратно в браузер. Вы защищены от любых странных ошибок. Вместо exec я рекомендую popen таким образом, вы можете убить процесс и вручную контролировать тайм-аут ожидания его завершения (в случае, если вы убьете этот процесс, вы можете легко отправить обратно ошибку в браузер);

вам нужна слабая / нормальная безопасность (такая же, как и весь бэкэнд IDE) для нормального процесса PHP, который запускается при вызове через браузер.

вам нужны строгие и параноидальные безопасность для php.процесс ini и php, который запускает временный скрипт (продолжайте и даже отделите его на другой машине, у которой нет доступа к сети/интернету и ее состояние возвращается на завод каждый час, чтобы быть уверенным).

не используйте eval(), он не подходит для этого сценария. Злоумышленник может выскочить в ваше приложение и использовать ваши текущие разрешения и состояние переменных против вас.


базовая версия будет

  1. вы скрипты выводит форму с вводом строки
  2. действие формы указывает на ваш скрипт
  3. скрипт принимает ввод в форму и передает его eval
  4. передать любой вывод из eval в браузер
  5. снова вывести форму

проблема в том, что определенные функции и переменные теряются между каждым запросом.

вы могли бы добавить каждый строка, введенная в сеанс. Скажем

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

таким образом, на каждом сеансе выполняется полный PHP-скрипт (и, конечно же, вы получите полный вывод).

другой вариант - создать какой-то демон (в основном экземпляр php -a call), который работает на сервере в фоновом режиме и получает ваш ввод из браузера и передает вывод.

вы можете подключить этот демон к двум устройствам FIFO (одно для ввода и одно для выход) и общаться через простой fopen.

для каждого пользователя, использующего ваш скрипт, должен быть создан новый процесс демона.

Излишне говорить, что важно защитить свой скрипт от жестокого обращения.


недавно я прочитал о интерпретаторе PHP, написанном на Javascript php.js, чтобы вы могли писать и выполнять PHP-код, используя только свой браузер. Я не уверен, что это то, что вам нужно в конце концов, но это звучит интересно.


мы протестировали некоторые продукты в моем университете для ssh-доступа к нашим лабораторным серверам и использовали некоторые из Web-SSH-Tools - они в основном делают именно то, что вы хотите. The Ракушка-В-Коробке - проект может быть привязан к любому интерпретатору, который вам нравится, и при желании может использоваться с интерактивным php-интерпретатором (на демо-странице они использовали базовый интерпретатор). Проект может служить основой для истинной PHP-IDE. Эти имеют преимущество мочь взаимодействовать с любой консольный редактор (например, vi, emacs или nano), а также возможность давать административные команды (например, создание папок, изменение владельцев или ACLs или перезагрузка службы).

Mozilla также имеет полнофункциональную WEBBASED IDE под названием Беспин, который также очень расширяемый и настраиваемый.

Как вы заявили, что страница не для общественности, Вы, конечно, должны защитить страницу с аутентификацией и SSL для борьбы сеанса.