gpt4 book ai didi

python - python os模块文档中的代码示例如何创建安全漏洞?

转载 作者:太空狗 更新时间:2023-10-30 02:52:18 24 4
gpt4 key购买 nike

documentation对于 os 模块进行以下断言:


注意

使用 access() 检查用户是否被授权,例如在实际打开文件之前使用 open() 会创建一个安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操作它。最好使用 EAFP技巧。例如:

if os.access("myfile", os.R_OK):
with open("myfile") as fp:
return fp.read()
return "some default data"`

最好写成:

try:
fp = open("myfile")
except PermissionError:
return "some default data"
else:
with fp:
return fp.read()

我不明白用户如何“利用”这个时间间隔。如果 open 将引发异常,我不确定 os.access 将如何防止引发该异常。同样,如果用户以某种方式操作文件,为什么不在 EAFP 版本的 open 命令之前执行文件操作?

我知道第二个版本可能更健壮,因为 os.access 可能无法正确识别可能引发 PermissionError 的条件,但我不知道看不到LBYL如何版本不太安全。谁能解释一下?

最佳答案

虽然使用access 的代码是不安全的,但第二个代码片段并没有解决安全问题。这些文档应该更改。

os.access的目的是在真实用户id和有效用户id不同的情况下,测试真实用户id是否有访问文件的权限。 os.access 片段的危险在于,用户可以将文件 access 返回 True for 放在被测试的位置,然后交换它out 文件 access 将返回 False ,绕过检查。由于 open 使用有效的用户 ID,open 调用仍然可以工作,绕过 access 检查。

第二个片段没有解决这个问题。现在用户甚至不需要通过切换器。第二个片段的任何部分都不会检查真实用户 ID。

关于python - python os模块文档中的代码示例如何创建安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642117/

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