Sicherheit: Passkey-Registrierung nur mit Freigabe durch Superadmin

authServer.php nahm getCreateArgs/processCreate ohne jede Pruefung an und
uebernahm die Benutzer-id aus der URL. Jeder konnte damit aus dem Internet
einen Passkey fuer ein beliebiges Konto (auch Superadmin) registrieren und
sich anschliessend anmelden.

- sites/userkeys.php loest den addKey ein und legt eine Freigabe in der
  Session ab (5 Minuten, ein Benutzer, einmalig); der addKey wird geloescht
- authServer.php verlangt fuer getCreateArgs/processCreate Login,
  Superadmin-Recht und diese Freigabe; die Benutzer-id kommt aus der
  Freigabe, nicht aus der URL
- queryFidoMetaDataService nur fuer Superadmins
- Passkey-Login verweigert gesperrte Benutzer und meldet keinen Erfolg
  mehr, wenn der Benutzer fehlt
- addKey.php verlangt wie userkeys.php das Superadmin-Recht
- session_regenerate_id() nach Passwort- und Passkey-Login
- userkeys.php/addKey.php: $_GET["id"] als int statt ungequotet in SQL

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 10:09:54 +02:00
co-authored by Claude Opus 5
parent 0dceb35502
commit a6758ae63b
4 changed files with 43 additions and 9 deletions
+4 -3
View File
@@ -16,7 +16,8 @@ if($settings == "valid")
if(!@mysqli_select_db($dbconn,$mysql_db))
$err = error("Datenbank nicht gefunden!! ($mysql_db)");
}
if($_SESSION["login"] == "valid" && isset($_GET["id"])){
// Wie sites/userkeys.php: nur Superadmins dürfen Passkeys vergeben
if($_SESSION["login"] == "valid" && isset($_GET["id"]) && ((int)substr($_SESSION["rights"], RIGHTS_SUPERADMIN, 1) & RIGHTS_CHANGE)){
if(!mysqli_query($dbconn,"DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE);")){
echo mysqli_error($dbconn);
}
@@ -25,8 +26,8 @@ if($_SESSION["login"] == "valid" && isset($_GET["id"])){
if(!mysqli_query($dbconn,"INSERT INTO addKey SET accesskey=".$accessKey.", datetime=NOW();")){
echo mysqli_error($dbconn);
}
header('Location: https://wm.el-wa.org/kunden?action=userkeys&id='.$_GET["id"].'&addKey='.$accessKey);
echo 'https://wm.el-wa.org/kunden?action=userkeys&id='.$_GET["id"].'&addKey='.$accessKey;
header('Location: https://wm.el-wa.org/kunden?action=userkeys&id='.(int)$_GET["id"].'&addKey='.$accessKey);
echo 'https://wm.el-wa.org/kunden?action=userkeys&id='.(int)$_GET["id"].'&addKey='.$accessKey;
}else{
echo "Keine Berechtigung.";
}