Hallo,
ich möchte mir ein kleines Script programmieren, um von einem Webserver Daten abzurufen und daraufhin bestimmte Befehle ausführen.
Grundsätzlich kann man den Ergebnis von einem anderen System nie 100% vertrauen.
Sind bei Shell Scripts nicht Code Injections ein grundsätzliches Problem?
Oder gibt es eine Quoting / Escaping Funktion, die Code Injections verhindert?
Bei PHP (jetzt vielleicht nicht die optimale Sprache dafür) gibt es z.B. http://php.net/manual/de/function.escapeshellarg.php
Sicherheit Shell Scripts bei "Benutzereingaben"
Re: Sicherheit Shell Scripts bei "Benutzereingaben"
Du könntest den Ordner per Htaccess sichern. Dann kann das Script fast beliebig unsicher sein. Auch könnte natürlich das Script selbst ein Passwort verlangen. Denk daran TLS/SSL zu verwenden. Sollte das Script von beliebigen Personen aufrufbar sein solltest du die Eingabewerte sehr streng überprüfen.
- whisper
- Beiträge: 3376
- Registriert: 23.09.2002 14:32:21
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Re: Sicherheit Shell Scripts bei "Benutzereingaben"
Ich bin kein php Fan, dennoch kann man damit prima cgi Scripte programmieren.
Die Sprache liefert dir sichere Methoden und unsichere.
Python ebenso.
Wenn du es mit bash machst, bist du auf deine Künste angewiesen. Sobald du einen oder mehrere Übergabe Parameter hast, wird esunübersichtlich.
Wenn du dir für jeden Befehl ein Script leistest, also Relais_on Relais_off usw. Reicht Bash aus.
Suche mal nach "disable File Globbing" und ein paar Beispiele.
Die Sprache liefert dir sichere Methoden und unsichere.
Python ebenso.
Wenn du es mit bash machst, bist du auf deine Künste angewiesen. Sobald du einen oder mehrere Übergabe Parameter hast, wird esunübersichtlich.
Wenn du dir für jeden Befehl ein Script leistest, also Relais_on Relais_off usw. Reicht Bash aus.
Suche mal nach "disable File Globbing" und ein paar Beispiele.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt.
Re: Sicherheit Shell Scripts bei "Benutzereingaben"
danke für eure Antworten.
@uname
Ich möchte von meinem Client Daten von einem Webserver abrufen und daraufhin bestimmte Shell Befehle ausführen.
@whisper
Das Script wäre relativ klein. Daher überlege ich ob man das mit Bash gut umsetzen könnte, um zu vermeiden, dass ich z.B. php installieren muss.
Bzgl. meiner ursprünglicher Frage bin ich inzwischen auf printf gestoßen (weiß nicht ob das wirklich sicher ist, aber schaut auf den ersten Blick gut aus):
Insgesamt scheint man aber bei bash relativ viel falsch machen zu können.
Gibt es neben PHP eine andere Variante, die vielleicht besser geeignet ist?
@uname
Ich möchte von meinem Client Daten von einem Webserver abrufen und daraufhin bestimmte Shell Befehle ausführen.
@whisper
Das Script wäre relativ klein. Daher überlege ich ob man das mit Bash gut umsetzen könnte, um zu vermeiden, dass ich z.B. php installieren muss.
Bzgl. meiner ursprünglicher Frage bin ich inzwischen auf printf gestoßen (weiß nicht ob das wirklich sicher ist, aber schaut auf den ersten Blick gut aus):
Code: Alles auswählen
input='echo run evil command'
inputquoted=$(printf "%q" "$input")
$input
#Ausgabe: run evil command
$inputquoted
#Ausgabe: bash: echo\: command not found
Gibt es neben PHP eine andere Variante, die vielleicht besser geeignet ist?
Re: Sicherheit Shell Scripts bei "Benutzereingaben"
Warum? Verarbeite die Daten doch direkt mit PHP weiter und gib sie per HTML an den Browser zurück.user18 hat geschrieben:Ich möchte von meinem Client Daten von einem Webserver abrufen und daraufhin bestimmte Shell Befehle ausführen.
Naja. PHP und Bash haben natürlich auch vollkommen verschiedene Ansätze.
PHP ist eine Sprache, die serverseitig läuft und HTML generiert. Für einen Webserver wohl mehr geeignet als Bash
Wäre auch doof wenn du irgendwann deinen Webservice von Linux auf Windows portierst bzw. plötzlich eine Shell nicht mehr zur Verfügung steht.
Aus Sicherheitsgründen sollte man generell keine Shellbefehle ausführen lassen. CGI ist sowas von out.
Auch wirst du wohl mit CGI kaum die Interaktivität moderner Webservices von serverseitigen PHP und clientseitigen HTML/CSS/JS erreichen.
Schreib doch mal was du wirklich programmieren willst.
Es gibt bestimmt ähnliche Programme im Internet, die du dir mal anschauen könntest.