(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 以限制您的端点免受恶意的客户端和用户的攻击,以保护您的服务器的速度和有限的资源。
在烧瓶中 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 以限制您的端点免受恶意的客户端和用户的攻击,以保护您的服务器的速度和有限的资源。