首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >send_from_directory -何时使用send_file / Flask

send_from_directory -何时使用send_file / Flask
EN

Stack Overflow用户
提问于 2016-07-08 02:37:13
回答 1查看 16.5K关注 0票数 30

我仍然不清楚什么时候使用send_file,什么时候使用send_from_directory

我在一个受保护的文件夹里有一个文件。我可以通过两种方法访问该文件。因此,也许有人有一个例子,可以清楚地说明应该使用哪个函数。

代码语言:javascript
复制
@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 ''
EN

回答 1

Stack Overflow用户

发布于 2016-07-08 16:42:22

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是一个帮助器函数,它执行适当的安全检查。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38252955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档