04/28 Fixed some security issues

This commit is contained in:
2026-04-28 16:27:39 -04:00
parent d8b57cde77
commit bfc2f58fe2
38 changed files with 4273 additions and 4067 deletions
+22 -1
View File
@@ -28,6 +28,8 @@ def index():
return redirect(url_for('auth.login'))
@bp.route('/register', methods=['GET', 'POST'], endpoint='register')
@login_required
@admin_required
@log_user_activity('user_registration')
def register():
"""User registration endpoint"""
@@ -84,6 +86,18 @@ def login():
flash('Please enter both username and password.', 'error')
return render_template('login.html')
# Rate-limit check — blocks IPs with 5+ failed attempts in 15 minutes
from flask import current_app
sec_mgr = getattr(current_app, 'security_manager', None)
if sec_mgr and sec_mgr.is_auth_rate_limited():
logger_handler.log_security_event(
event_type="login_rate_limited",
description=f"Login blocked by rate limiter for username: {username}",
severity="HIGH"
)
flash('Too many failed attempts. Please wait 15 minutes before trying again.', 'error')
return render_template('login.html')
# Verify Turnstile if enabled
if turnstile_utils.is_enabled():
if not turnstile_utils.verify_turnstile(turnstile_response):
@@ -126,6 +140,10 @@ def login():
session['full_name'] = user.full_name
session['login_time'] = datetime.now().isoformat()
# Create a secure session token (also clears failed attempts for this IP)
if sec_mgr:
sec_mgr.create_secure_session(user.id)
# Update last login date
user.last_login_date = datetime.utcnow()
db.session.commit()
@@ -162,7 +180,10 @@ def login():
return redirect(url_for('attendance.attendance_report'))
else:
# Invalid credentials - log failed attempt
# Invalid credentials — record failed attempt for rate limiting
if sec_mgr:
sec_mgr.record_failed_attempt(username)
user_id = user.id if user else None
logger_handler.log_user_login(
user_id=user_id,