Skip to content

Commit 334829c

Browse files
author
wrongecho
committed
Force setup of MFA on login
1 parent 9491643 commit 334829c

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

login.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,6 @@
119119
$user_role = intval($row['user_role']);
120120
$user_encryption_ciphertext = $row['user_specific_encryption_ciphertext'];
121121
$user_extension_key = $row['user_extension_key'];
122-
if($force_mfa == 1 && $token == NULL) {
123-
$config_start_page = "user_security.php";
124-
$_SESSION['alert_message'] = "Please set up MFA.";
125-
}
126122

127123
$mfa_is_complete = false; // Default to requiring MFA
128124
$extended_log = ''; // Default value
@@ -202,8 +198,14 @@
202198
$_SESSION['csrf_token'] = randomString(156);
203199
$_SESSION['logged'] = true;
204200

201+
// Forcing MFA
202+
if ($force_mfa == 1 && $token == NULL) {
203+
$secretMFA = key32gen();
204+
$config_start_page = "post.php?enable_2fa_force&token=$secretMFA&csrf_token=$_SESSION[csrf_token]";
205+
}
206+
205207
// Setup encryption session key
206-
if (isset($user_encryption_ciphertext) && $user_role > 1) {
208+
if (isset($user_encryption_ciphertext)) {
207209
$site_encryption_master_key = decryptUserSpecificKey($user_encryption_ciphertext, $password);
208210
generateUserSessionKey($site_encryption_master_key);
209211

post/user/profile.php

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,24 +207,35 @@
207207

208208
}
209209

210-
if (isset($_POST['enable_2fa'])){
210+
if (isset($_POST['enable_2fa']) || isset($_GET['enable_2fa_force'])) {
211211

212212
// CSRF Check
213-
validateCSRFToken($_POST['csrf_token']);
213+
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
214+
validateCSRFToken($_POST['csrf_token']);
215+
216+
$extended_log_description = "";
217+
$token = sanitizeInput($_POST['token']);
218+
} else {
219+
// If this is a GET request then we forced MFA as part of login
220+
validateCSRFToken($_GET['csrf_token']);
221+
222+
$extended_log_description = "(forced)";
223+
$token = sanitizeInput($_GET['token']);
224+
}
225+
214226

215-
$token = sanitizeInput($_POST['token']);
216227

217228
mysqli_query($mysqli,"UPDATE users SET user_token = '$token' WHERE user_id = $session_user_id");
218229

219230
// Delete any existing 2FA tokens - these browsers should be re-validated
220231
mysqli_query($mysqli, "DELETE FROM remember_tokens WHERE remember_token_user_id = $session_user_id");
221232

222233
//Logging
223-
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User Settings', log_action = 'Modify', log_description = '$session_name enabled 2FA on their account', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_user_id = $session_user_id");
234+
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User Settings', log_action = 'Modify', log_description = '$session_name enabled 2FA on their account $extended_log_description', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_user_id = $session_user_id");
224235

225-
$_SESSION['alert_message'] = "Two-factor authentication enabled";
236+
$_SESSION['alert_message'] = "Two-factor authentication enabled $extended_log_description";
226237

227-
header("Location: " . $_SERVER["HTTP_REFERER"]);
238+
header("Location: user_security.php");
228239

229240
}
230241

0 commit comments

Comments
 (0)