Use bound parameters for every query that takes user data.

The queue image query took $id without quotes or a check, which allowed
SQL injection.
This commit is contained in:
tim
2026-09-25 21:29:09 +02:00
parent cda0602c95
commit c85f54116c
7 changed files with 70 additions and 89 deletions
+9 -18
View File
@@ -32,15 +32,11 @@ function check_persistent_login() {
$table = "persistent_sessions";
open_db('open');
$cookie_data = $db->real_escape_string($_COOKIE['PersistentAuth']);
$cookie_data = (string)$_COOKIE['PersistentAuth'];
list($username, $key) = explode("|", $cookie_data, 2) + array('', '');
$username = $db->real_escape_string($username);
$key = $db->real_escape_string($key);
$query = "SELECT * FROM $table WHERE ".
"username LIKE '".$username."' ".
"LIMIT 1;";
$getid = $db->query($query) or die("Query failed: ".$db->error);
$query = "SELECT * FROM $table WHERE username LIKE ? LIMIT 1";
$getid = $db->execute_query($query, array($username)) or die("Query failed: ".$db->error);
$row = $getid->fetch_assoc();
open_db('close');
@@ -67,12 +63,11 @@ function create_persistent_login($username) {
$table = "persistent_sessions";
open_db('open');
$username = $db->real_escape_string($username);
$key = bin2hex(random_bytes(100));
// Add session key to database
$query = "INSERT INTO $table " . "(username, session) VALUES ('" . $username."', '" . $key . "');";
$db->query($query) or die("Query failed: ".$db->error);
$query = "INSERT INTO $table (username, session) VALUES (?, ?)";
$db->execute_query($query, array($username, $key)) or die("Query failed: ".$db->error);
open_db('close');
// Create cookie with key
@@ -86,16 +81,12 @@ function delete_persistent_login() {
$table = "persistent_sessions";
open_db('open');
$cookie_data = $db->real_escape_string($_COOKIE['PersistentAuth'] ?? '');
$cookie_data = (string)($_COOKIE['PersistentAuth'] ?? '');
list($username, $key) = explode("|", $cookie_data, 2) + array('', '');
$username = $db->real_escape_string($username);
$key = $db->real_escape_string($key);
// Add session key to database
$query = "DELETE FROM $table " .
" WHERE username LIKE '" . $username . "'" .
" AND session LIKE '" . $key . "';";
$db->query($query) or die("Query failed: ".$db->error);
// Remove this session key from the database
$query = "DELETE FROM $table WHERE username LIKE ? AND session LIKE ?";
$db->execute_query($query, array($username, $key)) or die("Query failed: ".$db->error);
// Reap old sessions
$query = "DELETE FROM $table " .