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>
79 lines
3.5 KiB
PHP
79 lines
3.5 KiB
PHP
<?php
|
|
if(!isset($_POST["user"]))
|
|
$_POST["user"] = "";
|
|
else
|
|
$_POST["user"] = htmlspecialchars($_POST["user"]);
|
|
if(!isset($_POST["pass"]))
|
|
$_POST["pass"] = "";
|
|
else
|
|
$_POST["pass"] = htmlspecialchars($_POST["pass"]);
|
|
|
|
$smarty->display("heading.tpl");
|
|
$smarty->assign("local",isLocal());
|
|
if(isset($_GET["formsent"]) && $_SESSION["login"] != "valid" && isLocal())
|
|
{
|
|
$qry= mysqli_query($dbconn, "SELECT salt FROM user WHERE LOWER(nick) = '".mysql_escape_string(strtolower($_POST["user"]))."' AND blocked = 0") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
|
if(mysqli_num_rows($qry) == 1)
|
|
{
|
|
$res = mysqli_fetch_array($qry);
|
|
$qry= mysqli_query($dbconn, "SELECT * FROM user WHERE nick = '".mysql_escape_string($_POST["user"])."' AND pass = '".crypt($_POST["pass"],$res[0])."'") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
|
if(mysqli_num_rows($qry) == 1)
|
|
{
|
|
$udata = mysqli_fetch_assoc($qry);
|
|
// neue Session-ID nach dem Login, sonst ist Session-Fixation möglich
|
|
session_regenerate_id(true);
|
|
$_SESSION["login"] = "valid";
|
|
$_SESSION["logedout"] = $udata["logedout"];
|
|
$_SESSION["user"] = $udata["id"];
|
|
$_SESSION["nick"] = $udata["nick"];
|
|
$_SESSION["vname"] = $udata["vname"];
|
|
$_SESSION["nname"] = $udata["nname"];
|
|
$_SESSION["rights"] = $udata["rights"];
|
|
$_SESSION["lastlogin"] = $udata["lastlogin"];
|
|
$_SESSION["numlogins"] = $udata["numlogins"];
|
|
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
|
if(!is_file("styles/".$_SESSION["style"]))
|
|
{
|
|
updateUserSetting($dbconn,"style", "default.css", $udata["id"]);
|
|
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
|
}
|
|
$_SESSION["zoom"] = getUserSetting($dbconn,"zoom", $_SESSION["user"], 1);
|
|
$_SESSION["privateNotes"] = getUserSetting($dbconn,"privnotes", $_SESSION["user"], "");
|
|
|
|
mysqli_query($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
}
|
|
else
|
|
{
|
|
$qry= mysqli_query($dbconn, "SELECT wrongpw FROM user WHERE nick = '".mysql_escape_string($_POST["user"])."'") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));;
|
|
if(mysqli_num_rows($qry))
|
|
{
|
|
$wrongpw = mysqli_fetch_array($qry);
|
|
if($wrongpw[0] < 10)
|
|
{
|
|
mysqli_query($dbconn, "UPDATE user SET wrongpw = wrongpw + 1 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
$triesleft = 10 - $wrongpw[0];
|
|
if($triesleft > 1)
|
|
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Nach weiteren $triesleft Versuchen wird der Benutzer deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
|
else
|
|
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Wenn der nächste Versuch falsch ist, wird der Benutzer für deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
|
}
|
|
else
|
|
{
|
|
mysqli_query($dbconn, "UPDATE user SET blocked = 1 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
error("Der Benuzer wurde deaktiviert, er muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
error("Dieser Benutzername existiert nicht.");
|
|
}
|
|
if($_SESSION["login"]=="valid"){
|
|
header('Location:?action=kunden');
|
|
}
|
|
else{
|
|
$smarty->display("start.tpl");
|
|
}
|
|
?>
|