From 52712aeff0cd6590b33f1fe2637803097f9d5971 Mon Sep 17 00:00:00 2001 From: Clemens Creutzburg Date: Wed, 2 Sep 2026 19:35:04 +0200 Subject: [PATCH] Anmeldung im internen Bereich repariert index.php und neueanfrage.php gaben das Header-Template aus, bevor check_intern_user() aufgerufen wurde. Dadurch schlugen setcookie(), session_regenerate_id() und header('Location: login.php') mit "headers already sent" fehl: die Session wurde geloescht ohne neues Cookie zu setzen, der rotierte Remember-Token landete nur in der DB, und die Weiterleitung blieb wirkungslos. Ergebnis war eine halb gerenderte Seite statt des Logins. Beide Seiten puffern jetzt mit ob_start(), wie login.php und verify_2fa.php es bereits tun. Weitere Fehler im selben Ablauf: - passwortvergessen.php uebergab $con (mysqli) an SendMailMessage(), das PDO erwartet -> fataler TypeError, "Passwort vergessen" brach immer mit HTTP 500 ab und verschickte nie eine Mail. - logout.php war aus dem Admin-Bereich kopiert und loeschte weder intern_securitytokens noch die Cookies remember_device / remember_device_token. Der Logout war damit wirkungslos, weil check_intern_user() sofort wieder ueber das Cookie anmeldete. - is_checked_in_index() pruefte das Admin-Cookie 'identifier' statt 'remember_device'. - index.php gab das undefinierte $email_value im Login-Formular aus. Co-Authored-By: Claude Opus 5 --- inc/functions.inc.php | 3 ++- intern/index.php | 5 +++++ intern/logout.php | 11 +++++++++++ intern/neueanfrage.php | 3 +++ intern/passwortvergessen.php | 2 +- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/inc/functions.inc.php b/inc/functions.inc.php index f6a4da5..7a3038e 100644 --- a/inc/functions.inc.php +++ b/inc/functions.inc.php @@ -2566,7 +2566,8 @@ function check_userdatenvorhanden() { function is_checked_in_index() { - if( isset($_SESSION['userid']) || isset($_COOKIE['identifier'])){ + // 'identifier' ist das Cookie des Admin-Bereichs - fuer den internen Bereich zaehlt 'remember_device'. + if( isset($_SESSION['userid']) || !empty($_COOKIE['remember_device'])){ return true; }else{ return false; diff --git a/intern/index.php b/intern/index.php index 8ac5a24..33130fd 100644 --- a/intern/index.php +++ b/intern/index.php @@ -1,8 +1,13 @@ diff --git a/intern/logout.php b/intern/logout.php index 03b72e6..06549b8 100644 --- a/intern/logout.php +++ b/intern/logout.php @@ -34,6 +34,17 @@ $cookieOpts = [ setcookie('identifier', '', $cookieOpts); setcookie('securitytoken', '', $cookieOpts); +// 4) Intern-Bereich: Remember-Device-Token loeschen. +// Ohne diesen Schritt meldet check_intern_user() den Benutzer beim naechsten +// Seitenaufruf ueber das Cookie automatisch wieder an - der Logout waere wirkungslos. +if (!empty($_COOKIE["remember_device"])) { + $stmt = $pdo->prepare("DELETE FROM intern_securitytokens WHERE identifier = :i"); + $stmt->execute([":i" => (string)$_COOKIE["remember_device"]]); +} + +setcookie("remember_device", "", $cookieOpts); +setcookie("remember_device_token", "", $cookieOpts); + include("templates/header.inc.php"); ?>
diff --git a/intern/neueanfrage.php b/intern/neueanfrage.php index 5128f28..35e8c34 100644 --- a/intern/neueanfrage.php +++ b/intern/neueanfrage.php @@ -1,4 +1,7 @@