如何正确清理文件名(防止shell注入)?

在子进程(shell = False)中使用文件名之前,通常要清理来自外部源(例如:xml文件)的文件名吗?

更新:
在发送一些解析的字符串之前,我想做一些基本的安全检查.给定的示例在远程模式下使用mpg123(命令行音频播放器)播放声音文件.

filename = child.find("filename").text # e.g.: filename = "sound.mp3"
pid = subprocess.Popen(["mpg123"],"-R"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
command = "L "+filename+"\n"  
pid.stdin.write(command.encode())

解决方法:

除非您正在使用Shell或执行任何操作,否则不需要清理文件名. Python的open()将不会在给定的文件名中执行任何命令.

为了进行安全检查,为避免覆盖文件,请使用操作系统的权限系统,并确保正在运行程序的用户只能覆盖和访问文件,并且应该能够覆盖和访问文件.

让任何程序从网络或另一个进程获取输入来接受绝对路径名通常不是一个好主意.在这种情况下,应该只允许在已定义的音乐文件夹下指定文件.我认为mp3播放器不会通过给它错误的文件造成损坏,但是至少您可以将其崩溃,这会很烦人.

上一篇:轮询子进程对象而不会阻塞


下一篇:python-process.communicate和getche()失败