python - 使用 os.path.abspath 来验证不受信任的文件名的位置是否安全?

标签 python security

我不认为我遗漏了什么。话又说回来,我还是个新手。

def GET(self, filename):
    name = urllib.unquote(filename)
    full = path.abspath(path.join(STATIC_PATH, filename))
    #Make sure request is not tricksy and tries to get out of
    #the directory, e.g. filename = "../.ssh/id_rsa". GET OUTTA HERE
    assert full[:len(STATIC_PATH)] == STATIC_PATH, "bad path"
    return open(full).read()

编辑: 我意识到如果文件不存在(至少在 web.py 下),这将返回错误的 HTTP 错误代码。我会解决这个问题。

最佳答案

os.path.abspath 本身是相当安全的。如果在 python -O 下运行,您的 assert 检查将被编译掉,这是一个风险。如果您的 STATIC_PATH 没有以正确的目录分隔符结尾,您可能会不小心允许一个恰好以它作为前缀的路径——例如,如果 STATIC_PATH/foo/bar,您会错误地接受位于 /foo/barbie/ 下的文件(因此,除非 STATIC_PATH 确实 以分隔符结尾,您需要稍微严格的检查以提供强有力的保证)。

关于python - 使用 os.path.abspath 来验证不受信任的文件名的位置是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2664568/

相关文章:

python - 读取txt文件的第一行和最后一行;最快的方法和子流程故障排除

python - 我可以在 Python 2.7 上运行一些 mod_wsgi 应用程序,而将其余应用程序保留在 Python 2.5 上吗?

python - 为 cookie 生成随机 session ID 的最安全方法?

php - md5盐密码php

apache-flex - 哈希值不匹配(可能与编码有关?)

python - url中的当前参数在django中的下一个url中设置

python url 映射语法

python - 使用 Label.configure() 动态更改 Tkinter 标签文本

c# - 我在哪里可以找到 "Shamir' 的 secret 共享的 C# 类”?

java - sun.reflect.CallerSensitive 注释是什么意思?