Нет, инъекция оболочки все еще происходит в вашем случае для этого: буфер обмена ('hello; RMDIR / S / QC: \') это поместит 'hello' в ваш буфер обмена, но выполнит rmdir.может помочь использование кавычек и shlex, например:
import shlex
if 'win' in system:
safe_arg='"%s"'%foo
assert len(shlex.split(safe_arg)) == 1, "Injection attempt detected"
cmd = 'echo %s | CLIP' % (safe_arg,)
РЕДАКТИРОВАТЬ: приведенный выше код все еще не является ни безопасным, ни надежным.Я думаю, что следующее, по крайней мере, лучше, но все же может сообщать о ложных срабатываниях:
foo = str(foo.strip('"').strip())
safe_arg = '"%s"'%foo
if '"' in foo:
if (len(shlex.split(safe_arg, False, False)) != 1): ...