prepare('SELECT * FROM staff WHERE id = ? AND is_active = 1'); $stmt->execute([$pendingId]); $staff = $stmt->fetch(); if ($staff && totp_verify($staff['totp_secret'], $code)) { unset($_SESSION['totp_pending_staff_id']); staff_login($staff); redirect('/staff/reports.php'); } $errors[] = 'Ungültiger Code. Bitte erneut versuchen.'; $need2fa = true; } } else { $email = trim($_POST['email'] ?? ''); $pass = $_POST['password'] ?? ''; if (!rate_limit_check('staff_login_attempt', client_ip(), 10, 15)) { $errors[] = 'Zu viele Anmeldeversuche. Bitte versuchen Sie es in einigen Minuten erneut.'; } elseif ($email && !rate_limit_check('staff_login_email', strtolower($email), 5, 15)) { // Konto-basierte Sperre – verhindert Brute-Force über wechselnde IPs $errors[] = 'Zu viele Anmeldeversuche für dieses Konto. Bitte warten Sie einige Minuten.'; } else { $stmt = get_db()->prepare('SELECT * FROM staff WHERE LOWER(email) = LOWER(?) AND is_active = 1'); $stmt->execute([$email]); $staff = $stmt->fetch(); if ($staff && password_verify($pass, $staff['password_hash'])) { // Erfolgreicher Login – Zähler zurücksetzen rate_limit_reset('staff_login_email', strtolower($email)); if ($staff['totp_enabled']) { $_SESSION['totp_pending_staff_id'] = $staff['id']; $need2fa = true; } else { staff_login($staff); redirect('/staff/reports.php'); } } else { $errors[] = 'E-Mail-Adresse oder Passwort ist falsch.'; } } } } $pageTitle = 'Mitarbeiter-Login'; $activePage = ''; // Staff-Header hat Sidebar – für Login-Seite eigenes schlankes HTML $banner = get_setting('banner_path'); $logo = get_setting('logo_path'); $displayName = get_setting('display_name', config()['site']['name']); ?> Mitarbeiter-Login – <?= e($displayName) ?> "> style="background-image:url(''); background-size:cover; background-position:center">
← Zum Kundenportal

Mitarbeiterbereich

Anmeldung für Support-Mitarbeiter und Administratoren.

Bitte geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein.

← Zurück zum Login

Passwort vergessen?