我不认为我错过任何东西.然后我又是一个新手.
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()
Run Code Online (Sandbox Code Playgroud)
编辑:我意识到如果文件不存在(至少在web.py下),这将返回错误的HTTP错误代码.我会解决这个问题.
os.path.abspath,本身,是非常安全的.assert如果在下运行python -O,您的支票将被编译掉,这是一个风险.如果你STATIC_PATH不正确的目录分隔符结束,你可能会不小心让这恰好把它作为前缀的路径-例如,如果STATIC_PATH是/foo/bar,你会错误地接受一个文件下生活/foo/barbie/(所以,除非STATIC_PATH 不与终端分隔符,你需要稍微严格的检查以获得强有力的保证).
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |