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

我不认为我错过任何东西.然后我又是一个新手.

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下运行,你的断言检查将被编译掉,这是一个风险.如果您的STATIC_PATH没有以正确的目录分隔符结束,您可能会意外地允许一个恰好将其作为前缀的路径 – 例如,如果STATIC_PATH是/ foo / bar,您将错误地接受生活在/ foo下的文件/ barbie /(因此,除非STATIC_PATH以分隔符结尾,否则您需要稍微更严格的检查以获得强有力的保证).

    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞