我还不清楚何时使用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 ''
Run Code Online (Sandbox Code Playgroud)
syn*_*nym 29
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是辅助函数,它执行适当的安全检查.
| 归档时间: |
|
| 查看次数: |
9001 次 |
| 最近记录: |