K. *_*son 5 python file-access python-os
该文件的os模块作出如下声明:
笔记
在实际使用 open() 之前,使用 access() 来检查用户是否被授权例如打开文件会创建一个安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。最好使用EAFP技术。例如:
if os.access("myfile", os.R_OK):
with open("myfile") as fp:
return fp.read()
return "some default data"`
Run Code Online (Sandbox Code Playgroud)
最好写成:
try:
fp = open("myfile")
except PermissionError:
return "some default data"
else:
with fp:
return fp.read()
Run Code Online (Sandbox Code Playgroud)
我不明白用户如何“利用”这个间隔。如果open要引发异常,我不确定如何os.access防止引发该异常。同样,如果用户以某种方式操作文件,为什么不在 EAFP 版本的open命令之前执行文件操作?
我确实理解第二个版本可能更健壮,因为os.access可能无法正确识别可能引发 a 的条件PermissionError,但我不明白LBYL版本的安全性如何。有人可以解释一下吗?
虽然access-using 代码不安全,但第二个代码片段并没有解决安全问题。这些文档应该更改。
目的os.access是测试真实用户ID和有效用户ID不同时,真实用户ID是否有权限访问文件。该os.access代码段的危险在于,用户可以将access返回的文件True放置在正在测试的位置,然后将其替换为access本来会返回的文件False,从而绕过检查。由于open使用了有效的用户 ID,open调用仍然可以工作,绕过access检查。
第二个片段没有解决这个问题。现在用户甚至不需要通过 switcheroo。第二个代码段没有任何部分检查真实用户 ID。
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |