abw*_*abw 6 python subprocess sanitization
在子进程 (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())
Run Code Online (Sandbox Code Playgroud)
除非您使用 shell 或执行任何操作,否则不需要清理文件名。Python 的 open() 不会执行给定文件名中的任何命令。
为了进行安全检查,为了避免覆盖文件,您可以使用操作系统的权限系统,并确保运行程序的用户只能覆盖和访问它应该能够覆盖和访问的文件。
让任何从网络或其他进程获取输入的程序接受绝对路径名通常不是一个好主意。在这种情况下,只允许指定已定义的音乐文件夹下的文件。我不认为 MP3 播放器会因提供错误的文件而造成损坏,但至少可以使其崩溃,这会很烦人。