TLDR: Das erwähnte Skript ist sicher!
Wenn Sie jedoch verstehen, dass Sie in der Produktion möglicherweise eine andere Version verwenden, sollten Sie die folgenden Konzepte kennen:
1 Gibt an, ob das Lesen für die Befehlsinjektion anfällig ist. Wenn es anfällig ist, dann 'Name' Wert wie 'Bob; cat / etc / passwd ' könnte den Inhalt der passwd-Datei zurückgeben und ' Bob && / bin / bash -i ' könnte eine interaktive Bash-Sitzung geben.
Solche Fragen waren schon gefragt, zB hier:
https://stackoverflow.com/questions/34640504/is-it-possible-to-perform-shell-injection-through-a-read-and-or-to- Ausbruch aus
Die Antwort lautet "Nein, nicht anfällig", weil:
"(..) moderne Shells die Anweisung vor analysieren Jede Variablensubstitution ist daher von diesem Angriff nicht betroffen. "
In Ihrem Beispiel kann die Benutzereingabe durch 'read' nicht innerhalb der Standard-Shell umgangen werden.
2. Wo wird die Eingabe analysiert?
Ihr Skript ist sicher, da 'Echo' keine Escape-Technik bietet (zumindest nicht bekannt). Aber denken Sie daran, "gefährliche" Binärdateien zu verwenden, wie in f.e. hier:
https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/
Wenn Benutzereingaben analysiert werden von: man | less | more, awk, find, nmap, python | php | perl, bash | sh selbst, dann ist ein Escape möglich, das eine vollständig interaktive Shell gewährt (ich habe gerade mit less, python und find getestet). .
Wenn Sie die Eingabe wie in Ihrem Beispiel nur für das Echo verwenden, sind Sie in Ordnung.
3. Gibt an, ob Ihre Eingabe innerhalb der Shell verwendet wird Befehl mit Sternchen (*), wie: tar * oder ls *
Ich kann mir nicht vorstellen, wann er in Ihrem Szenario nützlich sein kann, aber es ist immer so besser zu erwähnen. Wenn dies der Fall ist, machen Sie sich bitte mit dem folgenden Schreiben vertraut:
https://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt
Ein Verhalten kann auch dazu führen, dass Ihr Skript nicht mehr angezeigt wird.