如何避免 Shell 使用路径变量注入并等待命令存在?
How to avoid Shell Injection with a path variable and wait for command exist?
我需要读取命令的退出(然后我必须以同步方式等待它):
import subprocess
subprocess.call('ls ~', shell=True)
我的问题是这样的路径:
~/testing/;xterm;/blabla
我如何从用户那里清除该字符串(允许他的语言中的特殊字符)?
import subprocess
subprocess.call('ls ~/testing/;xterm;/blabla', shell=True) # This will launch xterm
我在 PHP 中找到了 escapeshellcmd,但我在 Python 中没有找到任何东西。
PS:这不是这个的副本:
- 因为是完整路径,not the filename.
- 而I read the
os.path
我没有找到解决方案。
提前致谢!
=======
传递列表而不是字符串。并删除 shell=True
以使命令不是 shell 的 运行。 (您需要使用 os.path.expanduser
自行扩展 ~
)
import os
import subprocess
subprocess.call(['ls', os.path.expanduser('~') + '/testing/;xterm;/blabla'])
旁注:如果您想获取文件名列表,最好使用 os.listdir
代替:
filelist = os.listdir(os.path.expanduser('~') + '/testing/;xterm;/blabla')
我需要读取命令的退出(然后我必须以同步方式等待它):
import subprocess
subprocess.call('ls ~', shell=True)
我的问题是这样的路径:
~/testing/;xterm;/blabla
我如何从用户那里清除该字符串(允许他的语言中的特殊字符)?
import subprocess
subprocess.call('ls ~/testing/;xterm;/blabla', shell=True) # This will launch xterm
我在 PHP 中找到了 escapeshellcmd,但我在 Python 中没有找到任何东西。
PS:这不是这个的副本:
- 因为是完整路径,not the filename.
- 而I read the
os.path
我没有找到解决方案。
提前致谢!
=======
传递列表而不是字符串。并删除 shell=True
以使命令不是 shell 的 运行。 (您需要使用 os.path.expanduser
自行扩展 ~
)
import os
import subprocess
subprocess.call(['ls', os.path.expanduser('~') + '/testing/;xterm;/blabla'])
旁注:如果您想获取文件名列表,最好使用 os.listdir
代替:
filelist = os.listdir(os.path.expanduser('~') + '/testing/;xterm;/blabla')