Hanno Böck commited on 2023-12-08 21:33:48
Zeige 2 geänderte Dateien mit 25 Einfügungen und 7 Löschungen.
... | ... |
@@ -12,8 +12,28 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
12 | 12 |
*/ |
13 | 13 |
|
14 | 14 |
require_once('inc/error.php'); |
15 |
+require_once('inc/base.php'); |
|
15 | 16 |
require_once('vendor/autoload.php'); |
16 | 17 |
|
18 |
+function gen_pw_hash($password) |
|
19 |
+{ |
|
20 |
+ $pwhash = crypt($password, '$6$' . random_string(6)); |
|
21 |
+ if (strlen($pwhash) < 13) { |
|
22 |
+ /* returns a string shorter than 13 chars on failure */ |
|
23 |
+ system_failure("Failed to calculate password hash!"); |
|
24 |
+ } |
|
25 |
+ return $pwhash; |
|
26 |
+} |
|
27 |
+ |
|
28 |
+function check_pw_hash($password, $pwhash) |
|
29 |
+{ |
|
30 |
+ $checkhash = crypt($password, $pwhash); |
|
31 |
+ if (strlen($checkhash) < 13) { |
|
32 |
+ /* returns a string shorter than 13 chars on failure */ |
|
33 |
+ system_failure("Invalid password hash!"); |
|
34 |
+ } |
|
35 |
+ return hash_equals($checkhash, $pwhash); |
|
36 |
+} |
|
17 | 37 |
|
18 | 38 |
function strong_password($password, $user = []) |
19 | 39 |
{ |
... | ... |
@@ -12,6 +12,7 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
12 | 12 |
*/ |
13 | 13 |
|
14 | 14 |
require_once('inc/base.php'); |
15 |
+require_once('inc/security.php'); |
|
15 | 16 |
require_once('inc/debug.php'); |
16 | 17 |
require_once('inc/error.php'); |
17 | 18 |
|
... | ... |
@@ -52,8 +53,7 @@ function find_role($login, $password, $i_am_admin = false) |
52 | 53 |
return null; |
53 | 54 |
} |
54 | 55 |
$db_password = $entry->password; |
55 |
- $hash = crypt($password, $db_password); |
|
56 |
- if (($entry->status == 0 && $hash == $db_password) || $i_am_admin) { |
|
56 |
+ if (($entry->status == 0 && check_pw_hash($password, $db_password)) || $i_am_admin) { |
|
57 | 57 |
$role = ROLE_SYSTEMUSER; |
58 | 58 |
if ($entry->primary) { |
59 | 59 |
$role = $role | ROLE_CUSTOMER; |
... | ... |
@@ -117,8 +117,7 @@ function find_role($login, $password, $i_am_admin = false) |
117 | 117 |
if (@$result->rowCount() > 0) { |
118 | 118 |
$entry = $result->fetch(PDO::FETCH_OBJ); |
119 | 119 |
$db_password = $entry->cryptpass; |
120 |
- $hash = crypt($password, $db_password); |
|
121 |
- if ($hash == $db_password || $i_am_admin) { |
|
120 |
+ if (check_pw_hash($password, $db_password) || $i_am_admin) { |
|
122 | 121 |
logger(LOG_INFO, "session/checkuser", "login", "logged in e-mail-account »{$account}«."); |
123 | 122 |
return ROLE_MAILACCOUNT; |
124 | 123 |
} |
... | ... |
@@ -131,8 +130,7 @@ function find_role($login, $password, $i_am_admin = false) |
131 | 130 |
if (@$result->rowCount() > 0) { |
132 | 131 |
$entry = $result->fetch(PDO::FETCH_OBJ); |
133 | 132 |
$db_password = $entry->cryptpass; |
134 |
- $hash = crypt($password, $db_password); |
|
135 |
- if ($hash == $db_password || $i_am_admin) { |
|
133 |
+ if (check_pw_hash($password, $db_password) || $i_am_admin) { |
|
136 | 134 |
logger(LOG_INFO, "session/checkuser", "login", "logged in virtual e-mail-account »{$account}«."); |
137 | 135 |
return ROLE_VMAIL_ACCOUNT; |
138 | 136 |
} |
... | ... |
@@ -260,7 +258,7 @@ function set_systemuser_password($uid, $newpass) |
260 | 258 |
{ |
261 | 259 |
$uid = (int) $uid; |
262 | 260 |
require_once('inc/base.php'); |
263 |
- $newpass = crypt($newpass, '$6$' . random_string(8) . '$'); |
|
261 |
+ $newpass = gen_pw_hash($newpass); |
|
264 | 262 |
db_query("UPDATE system.passwoerter SET passwort=:newpass WHERE uid=:uid", [":newpass" => $newpass, ":uid" => $uid]); |
265 | 263 |
logger(LOG_INFO, "session/checkuser", "pwchange", "changed user's password."); |
266 | 264 |
} |
267 | 265 |