Bereinigung von Benutzereingaben in der bash aus Sicherheitsgründen
Wie kann ich desinfizieren Benutzereingaben in ein bash-script, damit kann ich mich dann übergeben Sie Sie als argument zu einer anderen shell-Programm? Ich möchte verhindern, dass die folgenden:
INPUT="filename;rm -rf /"
ls $INPUT
Ich dachte, es sollte klug genug, um die Eingabe des Benutzers in Anführungszeichen wie folgt:
ls "$INPUT"
aber was, wenn es ein doppeltes Anführungszeichen in $INPUT
?
Oder hat bash schon mit diesem problem umzugehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Kurze
Bash bereits befasst sich damit. Angebotserstellung ist es ausreichend.
Lange
Eine grobe Anleitung, wie die shell parst diese Zeile:
Wegen der Zitate der
$INPUT
variable nicht Unterziehen word-splitting). Diels
sucht nach einer Datei namensfilename; rm -rf /
.Wenn Sie nicht nennen es dann die Erweiterung würde anders Vorgehen:
Können Sie zumindest den Trost, dass dies nicht tatsächlich ausführen
rm -rf /
. Vielmehr es passieren jede dieser Zeichenfolgen als einen Dateinamen zuls
. Du wirstls
einige Dateien, die Sie nicht wollen, aber zumindest ist es nicht aus versehen ausführen unerwünschte Befehle.Auszüge aus "man bash":
eval
set -f
).ls -- "$INPUT"
oderls -d -- "$INPUT"
wenn Sie nicht wollen, um eine Liste der Inhalte von Verzeichnissen.eval
ist ein wichtiger Fall. Die "rm" - Befehl ausgeführt werden, wenn Sie es Tateneval ls $INPUT
. Wenn eval beteiligt ist, dann backquote und$(cmd)
Teilausdrücke sind auch die möglichen Bedrohungen.