= 5) { $timePassed = time() - $_SESSION['last_attempt_time']; if ($timePassed < $lockoutTime) { $remaining = ceil(($lockoutTime - $timePassed) / 60); $error = "Te veel mislukte inlogpogingen. Probeer het over {$remaining} minuten opnieuw."; } else { // Reset na verloop van blokkade $_SESSION['login_attempts'] = 0; } } // Verwerk inlogverzoek if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($error)) { $csrfToken = $_POST['csrf_token'] ?? ''; $username = trim($_POST['username'] ?? ''); $password = $_POST['password'] ?? ''; // Kleine vertraging tegen timing-aanvallen usleep(200000); if (!verify_csrf_token($csrfToken)) { $error = 'Beveiligingstoken (CSRF) ongeldig of verlopen. Ververs de pagina.'; } else { // Vergelijk gebruikersnaam hash (timing-safe) en wachtwoord via bcrypt $userMatches = hash_equals(AUTH_USER_HASH, hash('sha256', strtolower($username))); $passMatches = password_verify($password, AUTH_PASS_HASH); if ($userMatches && $passMatches) { // Sessie fixatie voorkomen via regeneratie session_regenerate_id(true); $_SESSION['wpc_auth'] = true; $_SESSION['wpc_user_email'] = htmlspecialchars($username); $_SESSION['wpc_last_activity'] = time(); $_SESSION['login_attempts'] = 0; // Veilige doorverwijzing $redirect = $_GET['redirect'] ?? 'index.php'; // Alleen relatieve redirects toestaan if (empty($redirect) || strpos($redirect, '://') !== false || strpos($redirect, '//') === 0) { $redirect = 'index.php'; } header("Location: {$redirect}"); exit; } else { $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time(); $attemptsLeft = max(0, 5 - $_SESSION['login_attempts']); $error = "Ongeldige gebruikersnaam of wachtwoord. (Nog {$attemptsLeft} pogingen)"; } } } $csrfToken = get_csrf_token(); $logoutMessage = isset($_GET['logout']) ? 'U bent succesvol en veilig uitgelogd.' : ''; ?>
server.webenpcstudio.nl • Testdrive Hub