Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS usw)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
suleiman
Beiträge: 193
Registriert: 21.12.2016 04:09:41

Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS usw)

Beitrag von suleiman » 12.02.2017 14:04:30

Ich kenne zwei Variablen welche Kommandos enthalten können und dies will ich unterbinden, indem man Variablen mit "<>&*?./" nicht auslöst.
Problem dabei ist das "&", weil es auch für die URL-Decodierung genutzt wird.

Was muß ich in meine CGI-Skripts schreiben damit $REQUEST_METHOD und $QUERY_STRING nicht aus versehen ein Kommando auslösen ?

Hier mal ein Beispiel-Skript von mir: NoPaste-Eintrag39744
Zeile 19 bis 26 sind der interessante Teil, wo die Fehler ausgelöst werden können.

Nachtrag:
Ich habe irgendwas von irgendwelchen $IFS gehört...
Was sind IFS, bzw kann man damit Kommandos verhindern ?
Ich muß ja irgendwie die Variablen aufrufen damit ich gucken kann was drinne ist, aber das könnte den Fehler schon auslösen.

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS

Beitrag von alexander_ro » 16.02.2017 20:46:31

Das was Du da machen willst ist das Thema für mehrere Wochen Security Schulung für Programmierer und trotzdem machen es die meisten falsch oder vergessen was. Das kann ich leider nicht so mit wenigen Worten erklären. Aber ich kenne da eine hübsche Zusammenfassung die man hier findet: http://unix.stackexchange.com/questions ... six-shells. Ob das wirklich alle Fallen behandelt kann ich Dir nicht sagen es ist aber ein guter Anfang. Wie oben geschildert ein sehr Umfangreiches Thema.

[Edit]
Das ist vielleicht auch interessant: http://unix.stackexchange.com/questions ... characters
[/Edit]

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS

Beitrag von breakthewall » 17.02.2017 06:28:41

suleiman hat geschrieben:Was muß ich in meine CGI-Skripts schreiben damit $REQUEST_METHOD und $QUERY_STRING nicht aus versehen ein Kommando auslösen ?
Normalerweise würde ich ja generell davon abraten, überhaupt mit CGI zu arbeiten.
Wie dem Shellscript zu entnehmen war, war es schon mal kein schlechter Ansatz die Strings via sed bereinigen zu wollen. Auch wenn man zum Parsen noch nichts bereinigen muss, wenn nur auf Validität geprüft wird. Daher kann man Variablen in vielerlei Hinsicht vorab auf ihren Inhalt prüfen und ggf. Inhalte aussortieren, bspw. mit multiplen Test -und Regex-Konditionen, bevor Inhalte an sensible Funktionen weitergereicht werden. Und dann bei Bedarf, sofern erforderlich, können sie immer noch editiert werden.

Ein Beispiel:

Code: Alles auswählen

while read INPUT; do
        [ -z "$INPUT" ] && continue
        [[ "$INPUT" =~ [\.\*\<\>\&\?\/] ]] && echo "Found dangerous chars '[.*<>&?/]'" | tee -a > $LOG && INPUT="" && continue
        [[ "$INPUT" =~ ^[[:alnum:]]{10}$ ]] || continue
          echo "Do something with "$INPUT" ...."
done
Um aber generell mehr Sicherheit in Shellscripten zu etablieren, empfiehlt sich das Programm shellcheck. Es kann besonders für Anfänger sehr nützlich sein, und ernste Probleme inkl. Lösungen aufzeigen.
suleiman hat geschrieben:Nachtrag:
Ich habe irgendwas von irgendwelchen $IFS gehört...
Was sind IFS, bzw kann man damit Kommandos verhindern ?
Nein das ist für andere Belange gedacht.

Antworten