- sites/start.php: ein Query statt zwei, Passwortvergleich per hash_equals in PHP statt im SQL, Updates per id. Die Eingaben gehen nicht mehr durch htmlspecialchars(): Passwoerter werden beim Anlegen roh gehasht, mit & < > " ' konnte man sich deshalb bisher nie anmelden. - getUserSetting/updateUserSetting mit Platzhaltern; behoben: INSERT-Zweig rief mysqli_real_escape_string ohne Verbindung auf (Fatal Error), $mysqli_error als Variable, ungewolltes echo "update". Aufrufer escapen nicht mehr vor (sonst doppelt), settings.php: Tippfehler mysqi_real_escape_string beim Speichern von show_sks behoben, style nur als Dateiname ohne Pfad. - authServer.php, addKey.php, userkeys.php, checkAdduser(): Platzhalter. Passkey-INSERT setzt lastAuth/authKey (Pflichtfelder im strikten Modus). addKey nur als reine Ziffern, sonst passte "12345678xyz" per Typumwandlung. - checkLogin() entfernt: nirgends aufgerufen, fragte die nicht existierende Tabelle users ab. - userkeys.tpl: Passkey-Name escaped. Getestet gegen die migrierte Testdatenbank im strikten Modus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.9 KiB
PHP
63 lines
2.9 KiB
PHP
<?php
|
|
$smarty->display("heading.tpl");
|
|
$smarty->assign("local",isLocal());
|
|
if(isset($_GET["formsent"]) && $_SESSION["login"] != "valid" && isLocal())
|
|
{
|
|
// Eingaben unverändert verwenden: Passwörter werden beim Anlegen roh
|
|
// gehasht, ein htmlspecialchars() hier ließ Passwörter mit & < > " '
|
|
// nie passen. Ausgabe-Escaping übernimmt das Template.
|
|
$nick = isset($_POST["user"]) && is_string($_POST["user"]) ? $_POST["user"] : "";
|
|
$pass = isset($_POST["pass"]) && is_string($_POST["pass"]) ? $_POST["pass"] : "";
|
|
|
|
$udata = db_zeile($dbconn, "SELECT * FROM user WHERE nick = ? AND blocked = 0", array($nick));
|
|
if($udata === false)
|
|
error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
|
elseif($udata === null)
|
|
error("Dieser Benutzername existiert nicht.");
|
|
elseif(hash_equals($udata["pass"], crypt($pass, $udata["salt"])))
|
|
{
|
|
// 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"], "");
|
|
|
|
db_abfrage($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE id = ?", array($udata["id"]));
|
|
}
|
|
elseif($udata["wrongpw"] < 10)
|
|
{
|
|
db_abfrage($dbconn, "UPDATE user SET wrongpw = wrongpw + 1 WHERE id = ?", array($udata["id"]));
|
|
$triesleft = 10 - $udata["wrongpw"];
|
|
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
|
|
{
|
|
db_abfrage($dbconn, "UPDATE user SET blocked = 1 WHERE id = ?", array($udata["id"]));
|
|
error("Der Benuzer wurde deaktiviert, er muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.");
|
|
}
|
|
}
|
|
if($_SESSION["login"]=="valid"){
|
|
header('Location:?action=kunden');
|
|
}
|
|
else{
|
|
$smarty->display("start.tpl");
|
|
}
|
|
?>
|