Gibt es eine (relativ) sichere Möglichkeit, CLI-Befehle über das Web auszuführen?

Gibt es eine (relativ) sichere Möglichkeit, CLI-Befehle über das Web auszuführen?

Seit ich mit der Programmierung von LAMP-Apps begonnen habe, wollte ich ein Admin-Kontrollfeld für meine Boxen entwickeln. (Aus Spaß- und Lerngründen, sonst würde ich etwas verwenden, das es bereits auf dem Markt gibt)

Was mich aber immer davon abgehalten hat, war, dass ich immer gehört habe, dass exec()-Funktionen (der einzige mir bekannte Weg, dies zu erreichen) das Böse seien... Sie wissen schon: „Verwenden Sie sie nicht“, „das ist schlechte Codierung“ usw.

Was ich nie höre, ist eine sicherere Alternative für diesen Zweck, daher lautet meine Frage:

Gibt es irgendwelche?

Reicht es nicht aus, die App auf einem dedizierten Webserver mit einem kennwortgeschützten Dokumentstamm auszuführen?

Nun, das sind meine Zweifel.

Antwort1

Ich denke, das wirkliche Risiko besteht darin, dass Sie Benutzereingaben in eines dieser exec()'s mischen. Hier liegt das größte Risiko, da Sie Benutzern erlauben, Ihnen Eingaben zu geben, die, wenn sie in die CLI gemischt werden, gefährliche Dinge anrichten können, wie z. B. Semikolons ( ;) in ein Textfeld einfügen und zusätzliche Befehle ausführen, nachdem sie Argumente angegeben haben.

Daher sollte das Ausführen von Befehlen im schreibgeschützten Modus im Allgemeinen nicht gefährlicher sein als die Ausführung anderer Aktionen.

Es handelt sich im Grunde um dasselbe Problem wie bei einem SQL-Injection-Angriff, mit dem Sie vielleicht vertrauter sind.

Antwort2

Soweit ich weiß (und ich bin kein Programmierer, also nehmen Sie es mit Vorsicht), exec()sind Aufrufe überhaupt nicht böse. Es ist nur so, dass sie einen neuen Prozess aufspalten und einen hohen Overhead verursachen, da Sie eine Systemfunktion aufrufen. Im Allgemeinen wird empfohlen, die Dinge intern in dem Programm/Skript zu erledigen, das Sie gerade schreiben, und externe Aufrufe wie zu vermeiden exec().

Wenn Ihr Ziel jedoch darin besteht, Befehle auf dem System auszuführen, können Sie dies nicht ohne einen solchen Aufruf tun. Natürlich gibt es Sicherheitsrisiken. Wenn Sie beliebigen Benutzern erlauben, beliebige Befehle auf Ihrem Server auszuführen, ist das ein Ärgernis. Wenn der Zugriff auf diesen Server jedoch stark eingeschränkt ist, sollten Sie dies sicher tun können.

Die wichtigste Schlussfolgerung ist jedenfalls: exec()Funktionen sind nicht grundsätzlich schlecht, sie neigen lediglich dazu, weniger effizient zu sein, als etwas intern zu tun.

verwandte Informationen