小编pah*_*haz的帖子

如何在Windows上安全地转义cmd.exe shell的命令行参数?

好吧,我有一个必须在shell=True模式下执行的命令.

os.system 要么 subprocess.Popen(..., shell=True)

此命令包含字符串替换,如: cmd = "some_secret_command {0}".format(string_from_user)

我想要逃避string_from_user变量来防止任何注射.

简单的错误答案:

  1. 使用shlex.quote- 不正确

print(shlex.quote('file.txxt; &ls . #'))- > 'file.txxt; &ls . #'(注射)

例:

> python -c "import sys; print(sys.argv[1])" 'file.txxt; &ls . #'
secret.txt
secret2.txt
Run Code Online (Sandbox Code Playgroud)
  1. 使用转义^- 不正确

例:

import os

CMD = '''string with spaces'''.replace('', '^').replace('^"', '')
os.system('python -c "import sys; print(sys.argv[1])" {0}'.format(CMD))
Run Code Online (Sandbox Code Playgroud)

现在我可以使用 (space) and inject more then one argument.

  1. Use ^"'- 不正确 …

python windows cmd

7
推荐指数
1
解决办法
3409
查看次数

标签 统计

cmd ×1

python ×1

windows ×1