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: 39744
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.
Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS usw)
-
- 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
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]
[Edit]
Das ist vielleicht auch interessant: http://unix.stackexchange.com/questions ... characters
[/Edit]
-
- Beiträge: 507
- Registriert: 30.12.2016 23:48:51
Re: Bash-CGI: Shell-Kommandos via Variablen verhindern (XSS
Normalerweise würde ich ja generell davon abraten, überhaupt mit CGI zu arbeiten.suleiman hat geschrieben:Was muß ich in meine CGI-Skripts schreiben damit $REQUEST_METHOD und $QUERY_STRING nicht aus versehen ein Kommando auslösen ?
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
Nein das ist für andere Belange gedacht.suleiman hat geschrieben:Nachtrag:
Ich habe irgendwas von irgendwelchen $IFS gehört...
Was sind IFS, bzw kann man damit Kommandos verhindern ?