en el matraz request.get_data() leí la siguiente oración citada y me mantuvo pensando:
Por lo general, es una mala idea llamar a este método sin verificar primero la longitud del contenido, ya que un cliente podría enviar docenas de megabytes o más para causar problemas de memoria en el servidor.
Entonces, mi primera pregunta, ¿debería verificar content_length en cada entrada de datos, por ejemplo, iniciar sesión desde ? o es solo para archivos cargados?
aquí está mi código de matraz para la página de inicio/cierre de sesión:
@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) la instrucción print(request.content_length) anterior devuelve 33 .
¿Qué representa el número 33 ? ¿Podría convertirlo a kB o Bytes para ayudarme a comprender el significado de ese número?
Para evitar problemas de memoria o denegación de servicio, comprobar el encabezado de longitud de contenido puede proporcionar una representación de bytes de un cuerpo POST para una solicitud HTTP. Se recomienda no utilizar una solicitud con una cantidad absurda de datos, ya que un cliente podría enviar una solicitud falsificada con TONELADAS de datos que podrían ser muy difíciles de manejar para el servidor. El encabezado de longitud de contenido siempre se representa en cada solicitud HTTP válida falsificada o desde un navegador, por lo que es excelente para utilizar. Es importante usar ese número como un número entero y simplemente verificar si es mayor que un valor que sería extravagante pero posible, como unos pocos cientos antes de analizar la respuesta.
Para leer más, también le sugiero que mire Flask Limiter para limitar la velocidad de sus puntos finales contra clientes y usuarios con intenciones maliciosas de proteger la velocidad y los recursos limitados de su servidor.