Emulation der PHP CLI in einem Browser

8

Ich denke über die Idee einer browserbasierten PHP-IDE nach und bin gespannt auf die Möglichkeit, die Befehlszeile über den Browser zu emulieren, aber ich bin nicht vertraut genug mit der Entwicklung von Tools für das CLI, um zu wissen, ob es etwas ist könnte leicht oder überhaupt gemacht werden. Ich würde gerne noch mehr Nachforschungen anstellen, aber bisher konnte ich nicht viele Ressourcen finden.

Von einer hohen Ebene aus ist mein erster Instinkt, eine Texteingabe einzurichten, die Befehle über AJAX an ein PHP-Skript liefert und jede Ausgabe auf die Seite zurückgibt. Ich bin einfach nicht vertraut genug mit der CLI, um zu wissen, wie man in diesem Kontext damit in Verbindung tritt.

Ich brauche keinen tatsächlichen Code, obwohl das auch nützlich wäre, aber ich suche nach weiteren Funktionen, Klassen oder APIs, die ich näher untersuchen sollte. Idealerweise würde ich etwas bevorzugen, das in PHP gebrannt wird (angenommen PHP 5.3) und keine Bibliothek von Drittanbietern. Wie würdest du das angehen? Gibt es irgendwelche Ressourcen oder Projekte, über die ich Bescheid wissen sollte?

Bearbeiten : Der Anwendungsfall hierfür wäre ein lokaler Host oder Entwicklungsserver, keine öffentliche Seite.

    
VirtuosiMedia 19.07.2012, 05:33
quelle

4 Antworten

2

Rufen Sie diese Funktion über einen RPC oder einen direkten POST von javascript auf, der Dinge in dieser Reihenfolge erledigt:

  • Schreiben Sie den PHP-Code in eine Datei (mit einem zufälligen Namen) in einem Ordner (mit einem zufälligen Namen), wo er alleine sitzt, ausgeführt und am Ende der Ausführung gelöscht wird.
  • Im aktuellen PHP-Prozess wird nicht der Code in dieser Datei ausgeführt. Stattdessen muss es Exec-Berechtigungen haben (safe_mode off). exec('php -c /path/to/security_tight/php.ini') (siehe php -?)
  • Fangen Sie eine beliebige Ausgabe ab und senden Sie sie an den Browser zurück. Sie sind vor irgendwelchen seltsamen Fehlern geschützt. Anstelle von exec empfehle ich popen , damit Sie den Prozess beenden und das Zeitlimit für das Warten auf das Beenden manuell steuern können (falls Sie diesen Prozess beenden, können Sie einfach einen Fehler an den Browser zurücksenden);

Sie benötigen lax / normale Sicherheit (wie das gesamte IDE-Backend) für den normalen PHP-Prozess, der beim Aufruf über den Browser ausgeführt wird.

Sie benötigen strenge und paranoide Sicherheit für den php.ini und php Prozess, der das temporäre Skript ausführt (gehen Sie voran und trennen Sie es sogar auf einer anderen Maschine, die keinen Netzwerk- / Internet-Zugang hat und stündlich in den Herstellerstatus zurückgesetzt wird sicher sein).

Verwenden Sie nicht eval() , es ist für dieses Szenario nicht geeignet. Ein Angreifer kann in Ihre Anwendung springen und Ihren aktuellen Status für Berechtigungen und Variablen für Sie verwenden.

    
Tiberiu-Ionuț Stan 24.07.2012, 15:07
quelle
1

Die Basisversion wäre

  1. you scripts gibt ein Formular mit einer Zeileneingabe aus
  2. Die Formularaktion zeigt auf Ihr Skript
  3. Das Skript übernimmt die Eingabe in das Formular und übergibt es an eval
  4. Übergeben Sie eine Ausgabe von eval an den Browser
  5. gib das Formular erneut aus

Das Problem ist, dass definierte Funktionen und Variablen zwischen jeder Anfrage verloren gehen.

Wäre es möglich, jede Zeile hinzuzufügen, die in Ihrer Sitzung eingegeben wurde. Sagen wir

%Vor%

dadurch wird bei jeder Sitzung das vollständige PHP-Skript ausgeführt (und natürlich erhalten Sie die volle Ausgabe).

Eine andere Möglichkeit wäre, eine Art Daemon (im Grunde eine Instanz eines php -a -Aufrufs) zu erstellen, der auf dem Server im Hintergrund läuft und Ihre Eingaben vom Browser erhält und die Ausgabe übergibt.

Sie können diesen Daemon mit zwei FIFO-Geräten verbinden (einen für die Eingabe und einen für die Ausgabe) und über den einfachen fopen kommunizieren.

Für jeden Benutzer, der Ihr Skript verwendet, muss ein neuer Daemon-Prozess generiert werden.

Es ist unnötig zu sagen, dass es wichtig ist, Ihr Skript vor Missbrauch zu schützen.

    
Alex 21.07.2012 23:17
quelle
1

Vor kurzem habe ich über einen PHP-Interpreter gelesen, der in Javascript php.js geschrieben wurde, so dass Sie PHP-Code nur mit Ihrem Browser schreiben und ausführen können . Ich bin mir nicht sicher, ob das am Ende nötig ist, aber es klingt interessant.

    
pwuertz 28.07.2012 10:06
quelle
1

Wir haben einige Produkte an meiner Universität für ssh-Zugriff auf unsere Laborserver getestet und einige der Web-SSH- Tools - sie machen genau das, was Sie wollen. Das Shell-In-A-Box -Projekt ist möglicherweise an einen beliebigen Interpreter gebunden und kann mit einem Interactive verwendet werden PHP-Interpreter, falls gewünscht (auf der Demoseite wurde ein Basic-Interpreter verwendet). Das Projekt kann als Grundlage für eine echte PHP-IDE dienen. Diese haben den Vorteil, dass sie auch mit jedem konsolenbasierten Editor interagieren können (zB vi, emacs oder nano) und administrative Befehle geben können (zB Ordner erstellen, Eigentümerschaften oder ACLs ändern oder einen Dienst neu starten).

Mozilla hat auch eine webbasierte IDE mit vollem Funktionsumfang namens Bespin , die auch stark erweiterbar und konfigurierbar .

Wie Sie gesagt haben, dass die Seite nicht für die Öffentlichkeit bestimmt ist, müssen Sie die Seite natürlich mit Authentifizierung und SSL schützen, um zu bekämpfen Session-Hijacking .

    
Lars 28.07.2012 15:36
quelle