|
@@ -44,8 +44,8 @@ if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'recover') {
|
44
|
44
|
i.ResetExpires
|
45
|
45
|
FROM users_main AS m
|
46
|
46
|
INNER JOIN users_info AS i ON i.UserID = m.ID
|
47
|
|
- WHERE i.ResetKey = '".db_string($_REQUEST['key'])."'
|
48
|
|
- AND i.ResetKey != ''");
|
|
47
|
+ WHERE i.ResetKey = ?
|
|
48
|
+ AND i.ResetKey != ''", $_REQUEST['key']);
|
49
|
49
|
list($UserID, $Email, $Country, $Expires) = $DB->next_record();
|
50
|
50
|
|
51
|
51
|
if (!apcu_exists('DBKEY')) {
|
|
@@ -70,17 +70,17 @@ if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'recover') {
|
70
|
70
|
users_main AS m,
|
71
|
71
|
users_info AS i
|
72
|
72
|
SET
|
73
|
|
- m.PassHash = '".db_string(Users::make_sec_hash($_REQUEST['password']))."',
|
|
73
|
+ m.PassHash = ?,
|
74
|
74
|
i.ResetKey = '',
|
75
|
75
|
m.LastLogin = NOW(),
|
76
|
76
|
i.ResetExpires = NULL
|
77
|
|
- WHERE m.ID = '$UserID'
|
78
|
|
- AND i.UserID = m.ID");
|
|
77
|
+ WHERE m.ID = ?
|
|
78
|
+ AND i.UserID = m.ID", Users::make_sec_hash($_REQUEST['password']), $UserID);
|
79
|
79
|
$DB->query("
|
80
|
80
|
INSERT INTO users_history_passwords
|
81
|
81
|
(UserID, ChangerIP, ChangeTime)
|
82
|
82
|
VALUES
|
83
|
|
- ('$UserID', '".DBCrypt::encrypt($_SERVER['REMOTE_ADDR'])."', '".sqltime()."')");
|
|
83
|
+ (?, ?, NOW())", $UserID, DBCrypt::encrypt($_SERVER['REMOTE_ADDR']));
|
84
|
84
|
$PassWasReset = true;
|
85
|
85
|
$LoggedUser['ID'] = $UserID; // Set $LoggedUser['ID'] for logout_all_sessions() to work
|
86
|
86
|
logout_all_sessions();
|
|
@@ -100,7 +100,7 @@ if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'recover') {
|
100
|
100
|
UPDATE users_info
|
101
|
101
|
SET ResetKey = '',
|
102
|
102
|
ResetExpires = NULL
|
103
|
|
- WHERE UserID = '$UserID'");
|
|
103
|
+ WHERE UserID = ?", $UserID);
|
104
|
104
|
$_SESSION['reseterr'] = 'The link you were given has expired.'; // Error message to display on form
|
105
|
105
|
}
|
106
|
106
|
// Show him the first form (enter email address)
|
|
@@ -138,7 +138,7 @@ if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'recover') {
|
138
|
138
|
Username,
|
139
|
139
|
Email
|
140
|
140
|
FROM users_main
|
141
|
|
- WHERE Email = '$EncEmail'");
|
|
141
|
+ WHERE Email = ?", $EncEmail);
|
142
|
142
|
list($UserID, $Username, $Email) = $DB->next_record();
|
143
|
143
|
$Email = DBCrypt::decrypt($Email);
|
144
|
144
|
|
|
@@ -158,15 +158,15 @@ if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'recover') {
|
158
|
158
|
$DB->query("
|
159
|
159
|
SELECT SessionID
|
160
|
160
|
FROM users_sessions
|
161
|
|
- WHERE UserID = '$UserID'");
|
|
161
|
+ WHERE UserID = ?", $UserID);
|
162
|
162
|
while (list($SessionID) = $DB->next_record()) {
|
163
|
163
|
$Cache->delete_value("session_$UserID"."_$SessionID");
|
164
|
164
|
}
|
165
|
165
|
$DB->query("
|
166
|
166
|
UPDATE users_sessions
|
167
|
167
|
SET Active = 0
|
168
|
|
- WHERE UserID = '$UserID'
|
169
|
|
- AND Active = 1");
|
|
168
|
+ WHERE UserID = ?
|
|
169
|
+ AND Active = 1", $UserID);
|
170
|
170
|
} else {
|
171
|
171
|
$Err = 'There is no user with that email address.';
|
172
|
172
|
}
|
|
@@ -239,8 +239,8 @@ else {
|
239
|
239
|
TwoFactor,
|
240
|
240
|
Enabled
|
241
|
241
|
FROM users_main
|
242
|
|
- WHERE Username = '".db_string($_POST['username'])."'
|
243
|
|
- AND Username != ''");
|
|
242
|
+ WHERE Username = ?
|
|
243
|
+ AND Username != ''", $_POST['username']);
|
244
|
244
|
list($UserID, $PermissionID, $CustomPermissions, $PassHash, $TwoFactor, $Enabled) = $DB->next_record(MYSQLI_NUM, array(2));
|
245
|
245
|
if (!$Banned) {
|
246
|
246
|
if ($UserID && Users::check_password($_POST['password'], $PassHash)) {
|
|
@@ -248,8 +248,8 @@ else {
|
248
|
248
|
if (password_needs_rehash($PassHash, PASSWORD_DEFAULT)) {
|
249
|
249
|
$DB->query("
|
250
|
250
|
UPDATE users_main
|
251
|
|
- SET PassHash = '".make_sec_hash($_POST['password'])."'
|
252
|
|
- WHERE Username = '".db_string($_POST['username'])."'");
|
|
251
|
+ SET PassHash = ?
|
|
252
|
+ WHERE Username = ?", make_sec_hash($_POST['password']), $_POST['username']);
|
253
|
253
|
}
|
254
|
254
|
|
255
|
255
|
if (empty($TwoFactor) || $TwoFA->verifyCode($TwoFactor, $_POST['twofa'])) {
|
|
@@ -260,7 +260,7 @@ else {
|
260
|
260
|
$DB->query("
|
261
|
261
|
SELECT IP
|
262
|
262
|
FROM users_history_ips
|
263
|
|
- WHERE UserID = $UserID");
|
|
263
|
+ WHERE UserID = ?", $UserID);
|
264
|
264
|
$IPs = $DB->to_array(false, MYSQLI_NUM);
|
265
|
265
|
$QueryParts = [];
|
266
|
266
|
foreach ($IPs as $i => $IP) {
|
|
@@ -285,7 +285,7 @@ else {
|
285
|
285
|
UserName,
|
286
|
286
|
Email
|
287
|
287
|
FROM users_main
|
288
|
|
- WHERE ID = $UserID");
|
|
288
|
+ WHERE ID = ?", $UserID);
|
289
|
289
|
list($Username, $Email) = $DB->next_record();
|
290
|
290
|
Users::auth_location($UserID, $Username, $CurrentASN, DBCrypt::decrypt($Email));
|
291
|
291
|
require('newlocation.php');
|
|
@@ -299,7 +299,7 @@ else {
|
299
|
299
|
$DB->query("
|
300
|
300
|
SELECT KeyHandle, PublicKey, Certificate, Counter, Valid
|
301
|
301
|
FROM u2f
|
302
|
|
- WHERE UserID = $UserID");
|
|
302
|
+ WHERE UserID = ?", $UserID);
|
303
|
303
|
// Needs to be an array of objects, so we can't use to_array()
|
304
|
304
|
while (list($KeyHandle, $PublicKey, $Certificate, $Counter, $Valid) = $DB->next_record()) {
|
305
|
305
|
$U2FRegs[] = (object)['keyHandle'=>$KeyHandle, 'publicKey'=>$PublicKey, 'certificate'=>$Certificate, 'counter'=>$Counter, 'valid'=>$Valid];
|
|
@@ -313,9 +313,10 @@ else {
|
313
|
313
|
$U2FReg = $U2F->doAuthenticate(json_decode($_POST['u2f-request']), $U2FRegs, json_decode($_POST['u2f-response']));
|
314
|
314
|
if ($U2FReg->valid != '1') throw new Exception('Token disabled.');
|
315
|
315
|
$DB->query("UPDATE u2f
|
316
|
|
- SET Counter = ".($U2FReg->counter)."
|
317
|
|
- WHERE KeyHandle = '".db_string($U2FReg->keyHandle)."'
|
318
|
|
- AND UserID = $UserID");
|
|
316
|
+ SET Counter = ?
|
|
317
|
+ WHERE KeyHandle = ?
|
|
318
|
+ AND UserID = ?",
|
|
319
|
+ $U2FReg->counter, $U2FReg->keyHandle, $UserID);
|
319
|
320
|
} catch (Exception $e) {
|
320
|
321
|
$U2FErr = 'U2F key invalid. Error: '.($e->getMessage());
|
321
|
322
|
if ($e->getMessage() == 'Token disabled.') {
|
|
@@ -325,8 +326,8 @@ else {
|
325
|
326
|
$BadHandle = json_decode($_POST['u2f-response'], true)['keyHandle'];
|
326
|
327
|
$DB->query("UPDATE u2f
|
327
|
328
|
SET Valid = '0'
|
328
|
|
- WHERE KeyHandle = '".db_string($BadHandle)."'
|
329
|
|
- AND UserID = $UserID");
|
|
329
|
+ WHERE KeyHandle = ?
|
|
330
|
+ AND UserID = ?", $BadHandle, $UserID);
|
330
|
331
|
$U2FErr = 'U2F counter too low. This token has been disabled due to suspected cloning. Contact staff for assistance.';
|
331
|
332
|
}
|
332
|
333
|
}
|