Input validation is your first line of defense against many security vulnerabilities. This guide shows how to properly validate and sanitize user input based on the secure implementation.
@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'POST': username = request.form.get('username', '').strip() password = request.form.get('password', '') # Check for required fields if not username or not password: flash('Usuario y contraseña son requeridos', 'danger') return render_template('login.html') # Validate length to prevent DoS if len(username) > 50: flash('Usuario inválido', 'danger') return render_template('login.html')
if not username or not password or not email: flash('Todos los campos son requeridos', 'danger') return render_template('register.html')
3
Validate format and length
Ensure input meets expected criteria:
if len(username) < 3 or len(username) > 50: flash('El usuario debe tener entre 3 y 50 caracteres', 'danger') return render_template('register.html')if len(password) < 6: flash('La contraseña debe tener al menos 6 caracteres', 'danger') return render_template('register.html')
Comprehensive validation during user registration:
secure/app.py
@app.route('/register', methods=['GET', 'POST'])def register(): if request.method == 'POST': username = request.form.get('username', '').strip() password = request.form.get('password', '') email = request.form.get('email', '').strip() # Required field validation if not username or not password or not email: flash('Todos los campos son requeridos', 'danger') return render_template('register.html') # Length validation if len(username) < 3 or len(username) > 50: flash('El usuario debe tener entre 3 y 50 caracteres', 'danger') return render_template('register.html') # Password strength validation if len(password) < 6: flash('La contraseña debe tener al menos 6 caracteres', 'danger') return render_template('register.html')
Validate data types to prevent type confusion attacks:
secure/app.py
@app.route('/profile')def profile(): if 'user_id' not in session: return redirect('/login') requested_id = request.args.get('id', session['user_id']) # Type validation: ensure ID is an integer try: requested_id = int(requested_id) except ValueError: flash('ID inválido', 'danger') return redirect('/dashboard')
Always validate and convert user input to expected types before using them in queries or business logic.