prepare(" SELECT id FROM intern_2fa_codes WHERE user_id = :uid AND code = :code AND expires_at > NOW() LIMIT 1 "); $stmt->execute([ 'uid' => $userId, 'code' => $codeHash ]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if ($row) { // Code löschen (Einmalverwendung) $pdo->prepare("DELETE FROM intern_2fa_codes WHERE user_id = :uid") ->execute(['uid' => $userId]); session_regenerate_id(true); $_SESSION['userid'] = $userId; $_SESSION['2fa_verified'] = true; unset($_SESSION['2fa_userid']); /* ---------- Gerät merken ---------- */ if (!empty($_POST['remember_device'])) { $identifier = bin2hex(random_bytes(32)); $token = bin2hex(random_bytes(32)); $pdo->prepare(" INSERT INTO intern_securitytokens (user_id, identifier, securitytoken, expires_at) VALUES (:uid, :identifier, :token, :expires) ")->execute([ 'uid' => $userId, 'identifier' => $identifier, 'token' => hash('sha256', $token), 'expires' => date('Y-m-d H:i:s', time() + 30 * 24 * 3600) ]); $opts = [ 'expires' => time() + 30 * 24 * 3600, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]; setcookie('remember_device', $identifier, $opts); setcookie('remember_device_token', $token, $opts); } header('Location: index.php'); exit; } $error_msg = 'Falscher oder abgelaufener Code.'; } include("templates/header.inc.php"); ?>

Die Praxis Creutzburg sichert diesen Zugang mit einer Zwei-Faktor-Authentifizierung ab.
Sie benötigt neben Ihren Passwort auch den zweiten Faktor: eine zufällig generierte Nummer, die an Ihre E-Mail-Adresse versendet wurde.
Der zweite Faktor ist 5 Minuten gültig.
Prüfen Sie bitte jetzt Ihr Postfach und auch Ihren Spam-Ordner auf eine E-Mail von uns und geben Sie hier die sechsstellige Nummer ein.