ldr*_*drg 5 security python-3.x
python3系列最近添加了一个名为pathlib的面向对象的路径操作库。我希望能够断言子文件是父文件的后代,以避免人们阅读 /etc/passwd 等。标准库不提供任何有关安全使用 pathlib 的建议。有人可以提供一些安全使用 pathlib 的最佳实践吗?
目前,我正在做这样的事情。 root是一个 pathlib 对象,它是父文件夹。 path是一个相对于根的路径字符串。然而,它来自用户输入,不能被信任。
try:
root = root.resolve()
except (FileNotFoundError, RuntimeError):
raise Exception('your root directory does not exist')
path_obj = root / path
try:
path_obj = path_obj.resolve()
except (FileNotFoundError, RuntimeError):
raise Exception('your local file does not exist')
if root not in path_obj.parents:
raise Exception('nice try')
Run Code Online (Sandbox Code Playgroud)
超级迂腐的注释:在实践中,我对所有三个都提出了完全相同的异常,以免泄漏文件的存在/不存在。
Meh*_*nce -1
您的代码可以防止您的应用程序遭受本地文件包含或目录遍历攻击,但存在一个错误。
您还可以查看静态文件服务器的 Django 源代码来确定您的代码算法。https://github.com/django/django/blob/cb2c3ce15443a0666646e8b60984830c38d3ecde/django/views/static.py
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |