我仍然不清楚何时使用send_file
什么时候send_from_directory
.
我在受保护的文件夹中有一个文件。我可以通过这两种方法访问该文件。所以也许有人有一个例子可以清楚地表明应该使用哪个函数。
@app.route('/sfile/<id>')
def sfile(id=None):
try:
return send_file('protected/'+id, attachment_filename='python.jpg')
except:
return('')
@app.route('/sdir/<path:filename>')
def sdir(filename):
try:
return send_from_directory(
os.path.join(app.instance_path, ''),
filename
)
except:
return ''
send_file
是处理向用户发送文件的函数。它不会对输入进行健全性检查,因此它也会很乐意发送protected/../../../etc/passwd
管他呢。在您的具体情况下,这可能不起作用,但如果您不知道这种类型的攻击,您可能会生成不安全的代码。
send_from_directory
检查请求的文件是否确实来自指定目录。这样上面的攻击就不会起作用。
所以你可以使用send_file
每当输入文件路径可信时。这意味着要么自己检查,要么输入由您提供(例如my_file_paths = {"a": "path/to/a", ... }; send_file(my_file_paths[user_input])
会没事的)你应该没问题。对于常见情况send_from_directory
是一个辅助函数,它执行适当的安全检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)