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.
Rufen Sie diese Funktion über einen RPC oder einen direkten POST von javascript auf, der Dinge in dieser Reihenfolge erledigt:
exec('php -c /path/to/security_tight/php.ini')
(siehe php -?) 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.
Die Basisversion wäre
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.
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 .
Tags und Links php php-5.3 command-line-interface