Login und Passkeys auf Prepared Statements umgebaut
- 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>
This commit is contained in:
+15
-18
@@ -18,30 +18,27 @@ function readsettings()
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Benutzereinstellungen. Werte und ids roh übergeben - nicht escapen, das
|
||||
* erledigen die Platzhalter.
|
||||
*/
|
||||
function getUserSetting($dbconn,$setting, $user, $default = 0)
|
||||
{
|
||||
$qry2 = mysqli_query($dbconn, "SELECT val FROM setting WHERE opt = '".mysqli_real_escape_string($dbconn, $setting)."' AND user_id = '".mysqli_real_escape_string($dbconn, $user)."'") or die(mysqli_error($dbconn));
|
||||
if($res = mysqli_fetch_array($qry2))
|
||||
$ret = $res[0];
|
||||
else
|
||||
$ret = $default;
|
||||
|
||||
return $ret;
|
||||
$wert = db_wert($dbconn, "SELECT val FROM setting WHERE opt = ? AND user_id = ?", array($setting, $user));
|
||||
if($wert === false)
|
||||
die(mysqli_error($dbconn));
|
||||
return $wert === null ? $default : $wert;
|
||||
}
|
||||
|
||||
function updateUserSetting($dbconn,$setting, $value, $user)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,"SELECT id FROM setting WHERE opt = '".mysqli_real_escape_string($dbconn, $setting)."' AND user_id = '".mysqli_real_escape_string($dbconn, $user)."'") or die(mysqli_error($dbconn));
|
||||
if(mysqli_num_rows($qry))
|
||||
{
|
||||
$res = mysqli_fetch_array($qry);
|
||||
mysqli_query($dbconn, "UPDATE setting SET val = '".mysqli_real_escape_string($dbconn, $value)."' WHERE id = ".$res[0]) or die($mysqli_error($dbconn));
|
||||
echo "update";
|
||||
}
|
||||
else
|
||||
{
|
||||
mysqli_query($dbconn, "INSERT INTO setting SET val = '".mysqli_real_escape_string($dbconn, $value)."', user_id = '".mysqli_real_escape_string($dbconn, $user)."', opt = '".mysqli_real_escape_string($setting)."'") or die(mysqli_error($dbconn));
|
||||
}
|
||||
$id = db_wert($dbconn, "SELECT id FROM setting WHERE opt = ? AND user_id = ?", array($setting, $user));
|
||||
if($id === false)
|
||||
die(mysqli_error($dbconn));
|
||||
if($id !== null)
|
||||
db_abfrage($dbconn, "UPDATE setting SET val = ? WHERE id = ?", array($value, $id)) or die(mysqli_error($dbconn));
|
||||
else
|
||||
db_abfrage($dbconn, "INSERT INTO setting SET val = ?, user_id = ?, opt = ?", array($value, $user, $setting)) or die(mysqli_error($dbconn));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user