mirror of
https://github.com/itflow-org/itflow
synced 2026-03-21 13:05:39 +00:00
Removed Legacy AES Password conversion and old AES key from database
This commit is contained in:
@@ -95,8 +95,8 @@ $sql = mysqli_query($mysqli,"SELECT SQL_CALC_FOUND_ROWS * FROM clients
|
|||||||
OR contact_mobile LIKE '%$query%' OR location_address LIKE '%$query%' OR location_city LIKE '%$query%' OR location_state LIKE '%$query%' OR location_zip LIKE '%$query%')
|
OR contact_mobile LIKE '%$query%' OR location_address LIKE '%$query%' OR location_city LIKE '%$query%' OR location_state LIKE '%$query%' OR location_zip LIKE '%$query%')
|
||||||
AND DATE(client_created_at) BETWEEN '$date_from' AND '$date_to'
|
AND DATE(client_created_at) BETWEEN '$date_from' AND '$date_to'
|
||||||
AND clients.company_id = $session_company_id $permission_sql
|
AND clients.company_id = $session_company_id $permission_sql
|
||||||
ORDER BY $sortby $order LIMIT $record_from, $record_to"
|
ORDER BY $sortby $order LIMIT $record_from, $record_to
|
||||||
);
|
");
|
||||||
|
|
||||||
$num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
$num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
||||||
|
|
||||||
|
|||||||
3
db.sql
3
db.sql
@@ -1040,7 +1040,6 @@ DROP TABLE IF EXISTS `settings`;
|
|||||||
/*!40101 SET character_set_client = utf8 */;
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
CREATE TABLE `settings` (
|
CREATE TABLE `settings` (
|
||||||
`company_id` int(11) NOT NULL,
|
`company_id` int(11) NOT NULL,
|
||||||
`config_aes_key` varchar(250) DEFAULT NULL,
|
|
||||||
`config_base_url` varchar(200) DEFAULT NULL,
|
`config_base_url` varchar(200) DEFAULT NULL,
|
||||||
`config_smtp_host` varchar(200) DEFAULT NULL,
|
`config_smtp_host` varchar(200) DEFAULT NULL,
|
||||||
`config_smtp_port` int(5) DEFAULT NULL,
|
`config_smtp_port` int(5) DEFAULT NULL,
|
||||||
@@ -1367,4 +1366,4 @@ CREATE TABLE `vendors` (
|
|||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2022-02-04 15:58:24
|
-- Dump completed on 2022-02-05 16:40:40
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ $sql_settings = mysqli_query($mysqli,"SELECT * FROM settings WHERE company_id =
|
|||||||
$row = mysqli_fetch_array($sql_settings);
|
$row = mysqli_fetch_array($sql_settings);
|
||||||
|
|
||||||
//General
|
//General
|
||||||
$config_aes_key = $row['config_aes_key']; //Legacy
|
|
||||||
$config_base_url = $row['config_base_url'];
|
$config_base_url = $row['config_base_url'];
|
||||||
|
|
||||||
//Mail
|
//Mail
|
||||||
|
|||||||
77
post.php
77
post.php
@@ -1087,83 +1087,6 @@ if(isset($_GET['update_db'])){
|
|||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($_POST['encryption_update'])){
|
|
||||||
$password = $_POST['password'];
|
|
||||||
|
|
||||||
//Get user details
|
|
||||||
$sql = mysqli_query($mysqli,"SELECT * FROM users WHERE user_id = '$session_user_id'");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
|
||||||
|
|
||||||
//Verify the users password
|
|
||||||
if(!password_verify($password, $row['user_password'])){
|
|
||||||
$_SESSION['alert_message'] = "User password incorrect.";
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
//First, check if this user is setup for the new encryption setup
|
|
||||||
if(isset($row['user_specific_encryption_ciphertext'])){
|
|
||||||
echo "Ciphertext data already exists, using it.<br>";
|
|
||||||
$user_encryption_ciphertext = $row['user_specific_encryption_ciphertext'];
|
|
||||||
$site_encryption_master_key = decryptUserSpecificKey($user_encryption_ciphertext, $password);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
echo "User ciphertext data not found, attempting to add it.<br>";
|
|
||||||
$update_table = mysqli_query($mysqli, "ALTER TABLE `users` ADD `user_specific_encryption_ciphertext` VARCHAR(200) NULL AFTER `user_avatar`; ");
|
|
||||||
|
|
||||||
if(!$update_table){
|
|
||||||
echo "Error adding ciphertext column (user_specific_encryption_ciphertext) to users table.<br>";
|
|
||||||
echo "Either there was a connection/permissions issue or the column already exists (due to a upgrade already taking place?)<br>";
|
|
||||||
echo "Quitting to prevent compromising data integrity. Delete the column if you are sure you need to upgrade (presuming it contains no data).<br>";
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "Ciphertext column added successfully!<br>";
|
|
||||||
|
|
||||||
echo "Generating new master key.<br>";
|
|
||||||
$site_encryption_master_key = keygen();
|
|
||||||
echo "New master key is: $site_encryption_master_key <br>";
|
|
||||||
$user_encryption_ciphertext = setupFirstUserSpecificKey($password, $site_encryption_master_key);
|
|
||||||
|
|
||||||
$set_user_specific_key = mysqli_query($mysqli, "UPDATE users SET user_specific_encryption_ciphertext = '$user_encryption_ciphertext' WHERE user_id = '$session_user_id'");
|
|
||||||
if(!$set_user_specific_key){
|
|
||||||
echo "Something went wrong adding your user specific key.<br>";
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
//Setup the user session key
|
|
||||||
generateUserSessionKey($site_encryption_master_key);
|
|
||||||
|
|
||||||
//Invalidate user passwords
|
|
||||||
//If we don't do this, users won't be able to see the new passwords properly, and could potentially add passwords that can never be decrypted
|
|
||||||
mysqli_query($mysqli, "UPDATE users SET user_password = 'Invalid due to upgrade' WHERE user_id NOT IN ($session_user_id)");
|
|
||||||
$extended_log_description = ", invalidated all user passwords";
|
|
||||||
echo "Invalidated all user passwords. You must re-set them from this user account.<br>";
|
|
||||||
}
|
|
||||||
|
|
||||||
//Either way, if we got here we now have the master key as $site_encryption_master_key
|
|
||||||
|
|
||||||
//Get & upgrade user login encryption
|
|
||||||
$sql_logins = mysqli_query($mysqli,"SELECT *, AES_DECRYPT(login_password, '$config_aes_key') AS login_password FROM logins WHERE (company_id = '$session_company_id' AND login_password IS NOT NULL)");
|
|
||||||
$count = 0;
|
|
||||||
foreach ($sql_logins as $row){
|
|
||||||
$login_id = $row['login_id'];
|
|
||||||
$new_encrypted_password = encryptUpgradeLoginEntry($row['login_password'], $site_encryption_master_key);
|
|
||||||
mysqli_query($mysqli, "UPDATE logins SET login_password = '$new_encrypted_password' WHERE login_id = '$login_id'");
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
echo "Upgraded $count records.<br>";
|
|
||||||
|
|
||||||
//Logging
|
|
||||||
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Settings', log_action = 'Migrate', log_description = '$session_name upgraded company ID $session_company_id logins ($count total) to the new encryption scheme$extended_log_description', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_created_at = NOW(), log_user_id = $session_user_id, company_id = $session_company_id");
|
|
||||||
|
|
||||||
echo "Migration for company successful.<br>";
|
|
||||||
$_SESSION['alert_message'] = "Migration for company successful.";
|
|
||||||
|
|
||||||
echo "<a href='/settings-update.php'>Back to settings.</a>";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($_POST['add_client'])){
|
if(isset($_POST['add_client'])){
|
||||||
|
|
||||||
$name = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['name'])));
|
$name = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['name'])));
|
||||||
|
|||||||
@@ -61,61 +61,4 @@ $git_log = shell_exec("git log master..origin/master --pretty=format:'<tr><td>%h
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Updater to upgrade to new encryption -->
|
|
||||||
<div class="card card-dark">
|
|
||||||
<div class="card-header">
|
|
||||||
<h3 class="card-title"><i class="fa fa-fw fa-wrench"></i> Update AES Key</h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<center>
|
|
||||||
<div class="col-8">
|
|
||||||
<div class="alert alert-danger" role="alert">
|
|
||||||
<strong>You only need to continue with this action if you are upgrading/migrating to the new (post Jan 2022) encryption setup.</strong>
|
|
||||||
<ul>
|
|
||||||
<li>Please take a backup of your current AES config key (for each company), and your 'logins' database table</li>
|
|
||||||
<li>Please ensure you have access to ALL companies registered under this instance, if using multiple companies. Only one user should perform the entire migration.</li>
|
|
||||||
<li>This activity will invalidate all existing user passwords. You must set them again using THIS user account.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php
|
|
||||||
|
|
||||||
//Get current settings
|
|
||||||
include_once('get_settings.php');
|
|
||||||
echo "Current Company ID: $session_company_id <br>";
|
|
||||||
echo "Current User ID: $session_user_id <br>";
|
|
||||||
|
|
||||||
if ($config_aes_key) {
|
|
||||||
echo "Current (legacy) AES key: $config_aes_key <br><br>";
|
|
||||||
echo "<b>Below are the decrypted credentials for five login entries, please confirm they show and are correct before continuing. <br>Do NOT continue if no entries are shown or if the decrypted passwords are incorrect.</b><br>";
|
|
||||||
$sql = mysqli_query($mysqli,"SELECT *, AES_DECRYPT(login_password, '$config_aes_key') AS login_password FROM logins WHERE (company_id = '$session_company_id' AND login_password IS NOT NULL) LIMIT 5");
|
|
||||||
foreach ($sql as $row){
|
|
||||||
echo $row['login_username'] . ":" . $row['login_password'];
|
|
||||||
echo "<br>";
|
|
||||||
}
|
|
||||||
echo "<br>";
|
|
||||||
?>
|
|
||||||
|
|
||||||
<form method="POST" action="post.php">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="input-group col-3">
|
|
||||||
<input type="password" class="form-control" placeholder="Account Password" name="password" value="" required="">
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<p>Warning: This action is irreversible. Do NOT proceed without a backup.</p>
|
|
||||||
<button type="submit" class="btn btn-danger" name="encryption_update">Update encryption scheme for this company</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
echo "Config AES key is not set for this company.<br>";
|
|
||||||
echo "Please ensure upgrade is required. If you are sure you need to update, ensure the AES key is set correctly for this company.";
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
</center>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php include("footer.php");
|
<?php include("footer.php");
|
||||||
Reference in New Issue
Block a user