Sicherheit Shell Scripts bei "Benutzereingaben"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
user18
Beiträge: 20
Registriert: 21.05.2018 21:41:38

Sicherheit Shell Scripts bei "Benutzereingaben"

Beitrag von user18 » 24.07.2018 14:22:53

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

uname
Beiträge: 9455
Registriert: 03.06.2008 09:33:02

Re: Sicherheit Shell Scripts bei "Benutzereingaben"

Beitrag von uname » 24.07.2018 14:46:50

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.

Benutzeravatar
whisper
Beiträge: 2236
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Sicherheit Shell Scripts bei "Benutzereingaben"

Beitrag von whisper » 24.07.2018 15:08:43

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.

user18
Beiträge: 20
Registriert: 21.05.2018 21:41:38

Re: Sicherheit Shell Scripts bei "Benutzereingaben"

Beitrag von user18 » 24.07.2018 17:06:40

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):

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
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
Beiträge: 9455
Registriert: 03.06.2008 09:33:02

Re: Sicherheit Shell Scripts bei "Benutzereingaben"

Beitrag von uname » 25.07.2018 13:23:59

user18 hat geschrieben:Ich möchte von meinem Client Daten von einem Webserver abrufen und daraufhin bestimmte Shell Befehle ausführen.
Warum? Verarbeite die Daten doch direkt mit PHP weiter und gib sie per HTML an den Browser zurück.

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.

Antworten