(Flask) 出于安全原因,获取表单 content_length 作为预检是否好?

(Flask) is it good to get form content_length as precheck for security reasons?

在烧瓶中 request.get_data() 我读了下面引用的句子,它让我一直在思考:

Usually it’s a bad idea to call this method without checking the content length first as a client could send dozens of megabytes or more to cause memory problems on the server.

所以我的第一个问题是,我是否应该检查每个数据条目的 content_length,例如从 ? 登录还是仅适用于上传的文件?

这是 sign-in/sign-out 页面的烧瓶代码:

@app.route('/signing', methods=['GET', 'POST'])
def signing():
    try:
        if current_user.is_anonymous:
            if request.method == 'POST':
                print(request.content_length)
                username = request.form['username']
                password = request.form['password']
                
                user = Authorization.query.filter_by(username=username).first()
                login_user(user)
                return redirect(url_for('home_redirect'))
            else:
                return render_template('pages/signing.html')
        else:
            logout_user()
            return redirect(url_for('index'))
    except:
        abort(501)

上面的print(request.content_length)语句return 33.

数字33代表什么你能把它转换成kB,或者​​字节来帮助我理解它的意义吗数.

为了防止内存问题/拒绝服务,检查 content-length header 可以为 HTTP 请求提供 POST body 的字节表示。建议不要使用具有荒谬数据量的请求,因为客户端可能会发送带有 TONS 数据的欺骗请求,这对于服务器来说可能非常难以处理。 content-length header 总是出现在每个有效的 HTTP 请求中或来自浏览器,因此非常好用。使用该数字作为整数并简单地检查它是否大于一个古怪但可能的值,例如解析响应之前的几百个,这很重要。

如需更多阅读,我还建议您查看 Flask Limiter 以限制您的端点免受恶意的客户端和用户的攻击,以保护您的服务器的速度和有限的资源。