加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:13:30 所属栏目:Python 来源:网络整理
导读:我不认为我错过任何东西.然后我又是一个新手. 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
我不认为我错过任何东西.然后我又是一个新手.

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以分隔符结尾,否则您需要稍微更严格的检查以获得强有力的保证).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读