diff --git a/authServer.php b/authServer.php index dc3faca..d0ade36 100644 --- a/authServer.php +++ b/authServer.php @@ -35,12 +35,28 @@ */ require_once './restricted/WebAuthn/src/WebAuthn.php'; -require_once("./restricted/mysql.php"); +require_once("./helper.php"); // startet die Session, liefert isLocal() und mysql.php try { - session_start(); // read get argument and post body $fn = filter_input(INPUT_GET, 'fn'); + + // Registrierung und Loeschen von Anmeldedaten nur nach einem gueltigen + // Einmalschluessel aus addUser.php (checkAdduser setzt mayRegister) oder + // aus dem lokalen Netz. Ohne diese Wache genuegen zwei Aufrufe von + // beliebiger Stelle, um einen eigenen Passkey fuer das fest hinterlegte + // Konto anzulegen - der Einmalschluessel schuetzte nur die Anzeige in + // index.php, nicht diesen Endpunkt. + if ($fn === 'getCreateArgs' || $fn === 'processCreate' || $fn === 'clearRegistrations') { + $freigegeben = isset($_SESSION['mayRegister']) + && (time() - $_SESSION['mayRegister']) < 600; + if (!$freigegeben && !isLocal()) { + http_response_code(403); + header('Content-Type: application/json'); + print(json_encode(['success' => false, 'msg' => 'Registrierung nicht freigegeben.'])); + exit; + } + } $requireResidentKey = false; $userVerification = false; $formats = []; diff --git a/helper.php b/helper.php index e250bf6..fedabec 100644 --- a/helper.php +++ b/helper.php @@ -59,6 +59,10 @@ function checkAdduser(){ return false; } if ($result->num_rows > 0) { + // Freigabe fuer die Passkey-Registrierung vermerken. authServer.php + // prueft dieses Merkmal; ohne das waeren getCreateArgs/processCreate + // direkt aufrufbar und der Einmalschluessel wirkungslos. + $_SESSION["mayRegister"] = time(); return true; } return false;