gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:53:01 25 4
gpt4 key购买 nike

在子进程 (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())

最佳答案

我能想到一些事情。

如果系统具有容错性,则可以进行轻量级验证。如果数据破坏或敏感数据泄露的可能性很小,它也可能是合适的。您可以使用 os.path.isfile 来测试您给定的字符串是否为实际文件。

更经典的“安全”编程设计会让您为可以播放的可接受文件编制索引,并根据用户输入进行查找。通过这种方式,您永远不会真正传递用户输入。它通过查找“过滤”到已经验证的数据(接受的可播放文件列表)。

“ sanitizer ”输入是一种列入黑名单的技术。它们总是不如白名单技术(上图)安全。如果您别无选择,只能“清理”数据,您必须了解该数据如何通过您的系统以及您依赖的任何其他系统。然后,您必须制定规则以考虑所有系统中的任何缺陷或限制。您还必须涵盖典型的恶意输入案例,例如数据输入大小、 Not Acceptable 字符编码等。

关于python - 如何正确清理文件名(防止 shell 注入(inject))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com