Wenn dann sollte man auch das richtige Quoting verwenden: shlex.quote(s)
... dann funktioniert es auch mit der Sicherheit.
Das gibt es aber in dem hier verwendeten 2er Python nicht. Apropos, wenn man jetzt schon neu entwickelt, kann man auch ein 3er Python nehmen [print foo -> print(foo)].
Und sowieso ist der generelle Tipp besser als der spezielle: Nicht auf quoten verlassen, sondern generell der Anwendung entsprechend escapen! Sprich: Im String alle für die Zielanwendung genutzten Steuerzeichen ersetzen. Entweder durch speziell dafür entworfene Funktionen (wie shlex.quote(s)) oder eben schnell per Hand via string.replace(s, old, new). Die Steuerzeichen der Shell sind bekannt und vorgefertigte Ersetzungstabellen finden sich an diversen Ecken. In anderen Bereichen ist das ähnlich: SQL-Injection+co. sind sehr alte Hüte.
Besser ist es die Shell erst gar nicht zu bemühen wenn es nicht unbedingt nötig ist. Quoten ist eine Hilfe aber keine Lösung. Weshalb man bei SQL auch Platzhalter "?" benutzen sollte.
Wenn dann sollte man auch das richtige Quoting verwenden: shlex.quote(s)
... dann funktioniert es auch mit der Sicherheit.
Das gibt es aber in dem hier verwendeten 2er Python nicht. Apropos, wenn man jetzt schon neu entwickelt, kann man auch ein 3er Python nehmen [print foo -> print(foo)].
Und sowieso ist der generelle Tipp besser als der spezielle: Nicht auf quoten verlassen, sondern generell der Anwendung entsprechend escapen! Sprich: Im String alle für die Zielanwendung genutzten Steuerzeichen ersetzen. Entweder durch speziell dafür entworfene Funktionen (wie shlex.quote(s)) oder eben schnell per Hand via string.replace(s, old, new). Die Steuerzeichen der Shell sind bekannt und vorgefertigte Ersetzungstabellen finden sich an diversen Ecken. In anderen Bereichen ist das ähnlich: SQL-Injection+co. sind sehr alte Hüte.
Besser ist es die Shell erst gar nicht zu bemühen wenn es nicht unbedingt nötig ist. Quoten ist eine Hilfe aber keine Lösung. Weshalb man bei SQL auch Platzhalter "?" benutzen sollte.