【问题标题】:How to sanitize user-provided paths in Python and Flask?如何在 Python 和 Flask 中清理用户提供的路径?
【发布时间】:2013-05-29 22:25:52
【问题描述】:

我在我的 Python/Flask Web 应用程序中使用用户提供的名称作为路径组件:例如,用户创建了一个名为“hello”的项目,提示我的 Web 应用程序创建一个名为“data/hello/”的文件夹存储用户将上传的文件。我想知道如何清理用户提供的名称,例如,用户不能输入“../hello”并在不同的目录中创建文件夹。我能想到的最好的基于路径名的解决方案是这样的:

import os.path
rpath = os.path.relpath(input_path)
safepath = rpath[rpath.index('../'):]

有没有更好的方法来确保我的网络应用不会访问data 目录之外的文件?谢谢!

【问题讨论】:

    标签: python security web-applications flask user-input


    【解决方案1】:

    Werkzeug 提供了secure_filename 来帮助解决这个问题,Flask docs 中提供了一个示例

    @app.route('/', methods=['GET', 'POST'])
    def upload_file():
        if request.method == 'POST':
            file = request.files['file']
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename) #Sanitised here
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                return redirect(url_for('uploaded_file',
                                        filename=filename))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多