gpt4 book ai didi

python - repr 足以防止 Python 中的 shell 注入(inject)吗?

转载 作者:行者123 更新时间:2023-12-01 06:53:34 24 4
gpt4 key购买 nike

假设我有以下代码:

os.system(f'echo {repr(input())}')

repr 以语法正确的 python 形式输出字符串。即 repr("你好 ${ls -l}") == "'你好 ${ls -l}'"。它输出带有单引号的字符串,在 bash 中不允许替换。因此,理论上它可以防止 bash 和 POSIX shell 上的任何类型的 shell 注入(inject)。是这样吗?

最佳答案

回答我自己的问题,因为我意识到这不安全。我在问题中提到 repr 输出带单引号的字符串。这并非总是如此。当字符串包含单引号字符时,repr 将其用双引号括起来,从而允许替换。因此,以下输入将执行 ls -l 命令:

' $(ls -l)

用于 shell 引用的正确工具是 shlex.quote ,而不是repr。您还可以使用类似 subprocess.run 的函数而不是 os.system 并将命令作为列表而不是单个字符串传递,以完全避免引用的需要。

关于python - repr 足以防止 Python 中的 shell 注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900283/

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