3

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

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

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

4

1 回答 1

6

Werkzeugsecure_filename对此提供了帮助,Flask 文档中提供了一个示例

@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))
于 2013-06-03T18:12:45.543 回答