Hanno Böck commited on 2024-01-07 07:49:12
Zeige 3 geänderte Dateien mit 20 Einfügungen und 5 Löschungen.
| ... | ... |
@@ -30,6 +30,22 @@ function gen_pw_hash($password) |
| 30 | 30 |
return $pwhash; |
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 |
+ |
|
| 34 |
+function legacy_pw_verify($password, $hash) |
|
| 35 |
+{
|
|
| 36 |
+ /* Supports legacy SHA1/SHA256 hashes without salt, |
|
| 37 |
+ for new use cases use password_verify() instead */ |
|
| 38 |
+ if ($hash[0] == '$') {
|
|
| 39 |
+ return password_verify($password, $hash); |
|
| 40 |
+ } elseif (strlen($hash) == 40) {
|
|
| 41 |
+ return hash_equals(sha1($password), $hash); |
|
| 42 |
+ } elseif (strlen($hash) == 64) {
|
|
| 43 |
+ return hash_equals(hash("sha256", $password), $hash);
|
|
| 44 |
+ } |
|
| 45 |
+ return false; |
|
| 46 |
+} |
|
| 47 |
+ |
|
| 48 |
+ |
|
| 33 | 49 |
function strong_password($password, $user = []) |
| 34 | 50 |
{
|
| 35 | 51 |
$pwcheck = config('pwcheck');
|
| ... | ... |
@@ -104,7 +104,7 @@ function new_subuser($username, $requested_modules, $password) |
| 104 | 104 |
|
| 105 | 105 |
$args = [":uid" => $_SESSION['userinfo']['uid'], |
| 106 | 106 |
":username" => $username, |
| 107 |
- ":password" => hash("sha256", $password),
|
|
| 107 |
+ ":password" => gen_pw_hash($password), |
|
| 108 | 108 |
":modules" => implode(',', $modules), ];
|
| 109 | 109 |
|
| 110 | 110 |
db_query("INSERT INTO system.subusers (uid, username, password, modules) VALUES (:uid, :username, :password, :modules)", $args);
|
| ... | ... |
@@ -159,7 +159,7 @@ function edit_subuser($id, $username, $requested_modules, $password) |
| 159 | 159 |
if ($result !== true) {
|
| 160 | 160 |
system_failure("Unsicheres Passwort: " . $result);
|
| 161 | 161 |
} |
| 162 |
- $args[':password'] = hash("sha256", $password);
|
|
| 162 |
+ $args[':password'] = gen_pw_hash($password); |
|
| 163 | 163 |
$pwchange = ", password=:password"; |
| 164 | 164 |
} |
| 165 | 165 |
|
| ... | ... |
@@ -86,8 +86,7 @@ function find_role($login, $password, $i_am_admin = false) |
| 86 | 86 |
if (@$result->rowCount() > 0) {
|
| 87 | 87 |
$entry = $result->fetch(PDO::FETCH_OBJ); |
| 88 | 88 |
$db_password = $entry->password; |
| 89 |
- // SHA1 für alte Subuser (kaylee), SHA256 für neue Subuser |
|
| 90 |
- if (hash("sha1", $password) == $db_password || hash("sha256", $password) == $db_password || $i_am_admin) {
|
|
| 89 |
+ if (legacy_pw_verify($password, $db_password) || $i_am_admin) {
|
|
| 91 | 90 |
logger(LOG_INFO, "session/checkuser", "login", "logged in virtual subuser »{$login}«.");
|
| 92 | 91 |
return ROLE_SUBUSER; |
| 93 | 92 |
} |
| ... | ... |
@@ -249,7 +248,7 @@ function set_subuser_password($subuser, $newpass) |
| 249 | 248 |
{
|
| 250 | 249 |
$args = [":subuser" => $subuser, |
| 251 | 250 |
":uid" => (int) $_SESSION['userinfo']['uid'], |
| 252 |
- ":newpass" => sha1($newpass), ]; |
|
| 251 |
+ ":newpass" => gen_pw_hash($newpass), ]; |
|
| 253 | 252 |
db_query("UPDATE system.subusers SET password=:newpass WHERE username=:subuser AND uid=:uid", $args);
|
| 254 | 253 |
logger(LOG_INFO, "session/checkuser", "pwchange", "changed subuser's password."); |
| 255 | 254 |
} |
| 256 | 255 |