Bernd Wurst commited on 2014-02-03 20:49:24
Zeige 7 geänderte Dateien mit 92 Einfügungen und 87 Löschungen.
... | ... |
@@ -39,6 +39,13 @@ class DB extends PDO { |
39 | 39 |
*/ |
40 | 40 |
function query($stmt, $params = NULL) { |
41 | 41 |
if (is_array($params)) { |
42 |
+ if (config("enable_debug")) { |
|
43 |
+ foreach (array_values($params) as $p) { |
|
44 |
+ if ($p === '') { |
|
45 |
+ warning("Potential bug, empty string found in database parameters"); |
|
46 |
+ } |
|
47 |
+ } |
|
48 |
+ } |
|
42 | 49 |
$response = parent::prepare($stmt); |
43 | 50 |
$response->execute($params); |
44 | 51 |
return $response; |
... | ... |
@@ -77,9 +77,9 @@ function change_mailaccount($id, $arr) |
77 | 77 |
if (isset($arr['mailbox'])) { |
78 | 78 |
array_push($conditions, "`maildir`=:maildir"); |
79 | 79 |
if ($arr['mailbox'] == '') |
80 |
- $values[":mailbox"] = NULL; |
|
80 |
+ $values[":maildir"] = NULL; |
|
81 | 81 |
else |
82 |
- $values[":mailbox"] = $arr['mailbox']; |
|
82 |
+ $values[":maildir"] = $arr['mailbox']; |
|
83 | 83 |
} |
84 | 84 |
|
85 | 85 |
if (isset($arr['password'])) |
... | ... |
@@ -17,7 +17,7 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
17 | 17 |
function whitelist_entries() |
18 | 18 |
{ |
19 | 19 |
$uid = (int) $_SESSION['userinfo']['uid']; |
20 |
- $res = db_query("SELECT id,local,domain,date,expire FROM mail.greylisting_manual_whitelist WHERE uid={$uid};"); |
|
20 |
+ $res = db_query("SELECT id,local,domain,date,expire FROM mail.greylisting_manual_whitelist WHERE uid=?", array($uid)); |
|
21 | 21 |
$return = array(); |
22 | 22 |
while ($line = $res->fetch()) |
23 | 23 |
array_push($return, $line); |
... | ... |
@@ -27,9 +27,9 @@ function whitelist_entries() |
27 | 27 |
|
28 | 28 |
function get_whitelist_details($id) |
29 | 29 |
{ |
30 |
- $id = (int) $id; |
|
31 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
32 |
- $res = db_query("SELECT id,local,domain,date,expire FROM mail.greylisting_manual_whitelist WHERE uid={$uid} AND id={$id};"); |
|
30 |
+ $args = array(":id" => $id, |
|
31 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
32 |
+ $res = db_query("SELECT id,local,domain,date,expire FROM mail.greylisting_manual_whitelist WHERE uid=:uid AND id=:id", $args); |
|
33 | 33 |
if ($res->rowCount() != 1) |
34 | 34 |
system_failure('Kann diesen Eintrag nicht finden'); |
35 | 35 |
return $res->fetch(); |
... | ... |
@@ -42,7 +42,7 @@ function delete_from_whitelist($id) |
42 | 42 |
// Check if the ID is valid: This will die if not. |
43 | 43 |
$entry = get_whitelist_details($id); |
44 | 44 |
|
45 |
- db_query("DELETE FROM mail.greylisting_manual_whitelist WHERE id={$id} LIMIT 1;"); |
|
45 |
+ db_query("DELETE FROM mail.greylisting_manual_whitelist WHERE id=?", array($id)); |
|
46 | 46 |
} |
47 | 47 |
|
48 | 48 |
|
... | ... |
@@ -55,8 +55,9 @@ function valid_entry($local, $domain) |
55 | 55 |
system_failure('Diese E-Mail-Adresse gehört Ihnen nicht!'); |
56 | 56 |
return true; |
57 | 57 |
} |
58 |
- $d = db_escape_string($domain); |
|
59 |
- $res = db_query("SELECT id FROM mail.v_domains WHERE domainname='{$d}' AND user={$_SESSION['userinfo']['uid']} LIMIT 1"); |
|
58 |
+ $args = array(":domain" => $domain, |
|
59 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
60 |
+ $res = db_query("SELECT id FROM mail.v_domains WHERE domainname=:domain AND user=:uid", $args); |
|
60 | 61 |
if ($res->rowCount() != 1) |
61 | 62 |
system_failure('Diese domain gehört Ihnen nicht!'); |
62 | 63 |
return true; |
... | ... |
@@ -66,17 +67,19 @@ function valid_entry($local, $domain) |
66 | 67 |
function new_whitelist_entry($local, $domain, $minutes) |
67 | 68 |
{ |
68 | 69 |
valid_entry($local, $domain); |
69 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
70 |
- $local = maybe_null($local); |
|
71 |
- $domain = db_escape_string($domain); |
|
70 |
+ $args = array(":uid" => $_SESSION['userinfo']['uid'], |
|
71 |
+ ":local" => $local, |
|
72 |
+ ":domain" => $domain); |
|
72 | 73 |
|
73 |
- $expire = ''; |
|
74 |
- if ($minutes == 'none') |
|
75 | 74 |
$expire = 'NULL'; |
76 |
- else |
|
77 |
- $expire = "NOW() + INTERVAL ". (int) $minutes ." MINUTE"; |
|
75 |
+ if ($minutes == 'none') { |
|
76 |
+ $expire = 'NULL'; |
|
77 |
+ } else { |
|
78 |
+ $args[':minutes'] = $minutes; |
|
79 |
+ $expire = "NOW() + INTERVAL :minutes MINUTE"; |
|
80 |
+ } |
|
78 | 81 |
db_query("INSERT INTO mail.greylisting_manual_whitelist (local,domain,date,expire,uid) VALUES ". |
79 |
- "({$local}, '{$domain}', NOW(), {$expire}, $uid);"); |
|
82 |
+ "(:local, :domain, NOW(), {$expire}, :uid)", $args); |
|
80 | 83 |
} |
81 | 84 |
|
82 | 85 |
|
... | ... |
@@ -22,7 +22,7 @@ require_once('class/domain.php'); |
22 | 22 |
function get_jabber_accounts() { |
23 | 23 |
require_role(ROLE_CUSTOMER); |
24 | 24 |
$customerno = (int) $_SESSION['customerinfo']['customerno']; |
25 |
- $result = db_query("SELECT id, `create`, created, lastactivity, local, domain FROM jabber.accounts WHERE customerno='$customerno' AND `delete`=0;"); |
|
25 |
+ $result = db_query("SELECT id, `create`, created, lastactivity, local, domain FROM jabber.accounts WHERE customerno=? AND `delete`=0", array($customerno)); |
|
26 | 26 |
$accounts = array(); |
27 | 27 |
if (@$result->rowCount() > 0) |
28 | 28 |
while ($acc = @$result->fetch()) |
... | ... |
@@ -35,11 +35,10 @@ function get_jabber_accounts() { |
35 | 35 |
function get_jabberaccount_details($id) |
36 | 36 |
{ |
37 | 37 |
require_role(ROLE_CUSTOMER); |
38 |
- $customerno = (int) $_SESSION['customerinfo']['customerno']; |
|
39 |
- |
|
40 |
- $id = (int) $id; |
|
38 |
+ $args = array(":customerno" => $_SESSION['customerinfo']['customerno'], |
|
39 |
+ ":id" => $id); |
|
41 | 40 |
|
42 |
- $result = db_query("SELECT id, local, domain FROM jabber.accounts WHERE customerno={$customerno} AND id={$id} LIMIT 1"); |
|
41 |
+ $result = db_query("SELECT id, local, domain FROM jabber.accounts WHERE customerno=:customerno AND id=:id", $args); |
|
43 | 42 |
if ($result->rowCount() != 1) |
44 | 43 |
system_failure("Invalid account"); |
45 | 44 |
$data = $result->fetch(); |
... | ... |
@@ -69,20 +68,20 @@ function valid_jabber_password($pass) |
69 | 68 |
function create_jabber_account($local, $domain, $password) |
70 | 69 |
{ |
71 | 70 |
require_role(ROLE_CUSTOMER); |
72 |
- $customerno = (int) $_SESSION['customerinfo']['customerno']; |
|
73 |
- |
|
74 |
- $local = db_escape_string( filter_input_username($local) ); |
|
75 |
- $domain = (int) $domain; |
|
71 |
+ $data = array(":customerno" => $_SESSION['customerinfo']['customerno'], |
|
72 |
+ ":local" => filter_input_username($local), |
|
73 |
+ ":domain" => $domain); |
|
76 | 74 |
if (! valid_jabber_password($password)) |
77 | 75 |
{ |
78 | 76 |
input_error('Das Passwort enthält Zeichen, die aufgrund technischer Beschränkungen momentan nicht benutzt werden können.'); |
79 | 77 |
return; |
80 | 78 |
} |
81 |
- $password = db_escape_string( $password ); |
|
79 |
+ $data[':password'] = $password; |
|
82 | 80 |
|
83 | 81 |
if ($domain > 0) |
84 | 82 |
{ |
85 |
- $result = db_query("SELECT id FROM kundendaten.domains WHERE kunde={$customerno} AND jabber=1 AND id={$domain};"); |
|
83 |
+ $args = array(":domain" => $data[":domain"], ":customerno" => $data[":customerno"]); |
|
84 |
+ $result = db_query("SELECT id FROM kundendaten.domains WHERE kunde=:customerno AND jabber=1 AND id=:domain", $args); |
|
86 | 85 |
if ($result->rowCount() == 0) |
87 | 86 |
{ |
88 | 87 |
logger(LOG_WARNING, "modules/jabber/include/jabberaccounts", "jabber", "attempt to create account for invalid domain »{$domain}«"); |
... | ... |
@@ -90,20 +89,22 @@ function create_jabber_account($local, $domain, $password) |
90 | 89 |
} |
91 | 90 |
} |
92 | 91 |
|
93 |
- $domainquery = "domain={$domain}"; |
|
92 |
+ $args = array(":domain" => $data[":domain"], ":local" => $data[":local"]); |
|
93 |
+ $domainquery = "domain=:domain"; |
|
94 | 94 |
if ($domain == 0) |
95 | 95 |
{ |
96 |
- $domain = 'NULL'; |
|
96 |
+ unset($args[":domain"]); |
|
97 |
+ $data[":domain"] = NULL; |
|
97 | 98 |
$domainquery = 'domain IS NULL'; |
98 | 99 |
} |
99 |
- $result = db_query("SELECT id FROM jabber.accounts WHERE local='{$local}' AND {$domainquery}"); |
|
100 |
+ $result = db_query("SELECT id FROM jabber.accounts WHERE local=:local AND {$domainquery}", $args); |
|
100 | 101 |
if ($result->rowCount() > 0) |
101 | 102 |
{ |
102 | 103 |
logger(LOG_WARNING, "modules/jabber/include/jabberaccounts", "jabber", "attempt to create already existing account »{$local}@{$domain}«"); |
103 | 104 |
system_failure("Diesen Account gibt es bereits!"); |
104 | 105 |
} |
105 | 106 |
|
106 |
- db_query("INSERT INTO jabber.accounts (customerno,local,domain,password) VALUES ({$customerno}, '{$local}', {$domain}, '{$password}');"); |
|
107 |
+ db_query("INSERT INTO jabber.accounts (customerno,local,domain,password) VALUES (:customerno, :local, :domain, :password);", $data); |
|
107 | 108 |
logger(LOG_INFO, "modules/jabber/include/jabberaccounts", "jabber", "created account »{$local}@{$domain}«"); |
108 | 109 |
} |
109 | 110 |
|
... | ... |
@@ -112,16 +113,16 @@ function create_jabber_account($local, $domain, $password) |
112 | 113 |
function change_jabber_password($id, $password) |
113 | 114 |
{ |
114 | 115 |
require_role(ROLE_CUSTOMER); |
115 |
- $customerno = (int) $_SESSION['customerinfo']['customerno']; |
|
116 |
- $id = (int) $id; |
|
117 | 116 |
if (! valid_jabber_password($password)) |
118 | 117 |
{ |
119 | 118 |
input_error('Das Passwort enthält Zeichen, die aufgrund technischer Beschränkungen momentan nicht benutzt werden können.'); |
120 | 119 |
return; |
121 | 120 |
} |
122 |
- $password = db_escape_string( $password ); |
|
121 |
+ $args = array(":customerno" => $_SESSION['customerinfo']['customerno'], |
|
122 |
+ ":id" => $id, |
|
123 |
+ ":password" => $password); |
|
123 | 124 |
|
124 |
- db_query("UPDATE jabber.accounts SET password='{$password}' WHERE customerno={$customerno} AND id={$id} LIMIT 1"); |
|
125 |
+ db_query("UPDATE jabber.accounts SET password=:password WHERE customerno=:customerno AND id=:id", $args); |
|
125 | 126 |
logger(LOG_INFO, "modules/jabber/include/jabberaccounts", "jabber", "changed password for account »{$id}«"); |
126 | 127 |
} |
127 | 128 |
|
... | ... |
@@ -130,11 +131,11 @@ function change_jabber_password($id, $password) |
130 | 131 |
function delete_jabber_account($id) |
131 | 132 |
{ |
132 | 133 |
require_role(ROLE_CUSTOMER); |
133 |
- $customerno = (int) $_SESSION['customerinfo']['customerno']; |
|
134 | 134 |
|
135 |
- $id = (int) $id; |
|
135 |
+ $args = array(":customerno" => $_SESSION['customerinfo']['customerno'], |
|
136 |
+ ":id" => $id); |
|
136 | 137 |
|
137 |
- db_query("UPDATE jabber.accounts SET `delete`=1 WHERE customerno={$customerno} AND id={$id} LIMIT 1"); |
|
138 |
+ db_query("UPDATE jabber.accounts SET `delete`=1 WHERE customerno=:customerno AND id=:id", $args); |
|
138 | 139 |
logger(LOG_INFO, "modules/jabber/include/jabberaccounts", "jabber", "deleted account »{$id}«"); |
139 | 140 |
} |
140 | 141 |
|
... | ... |
@@ -143,7 +144,7 @@ function new_jabber_domain($id) |
143 | 144 |
{ |
144 | 145 |
$d = new Domain( (int) $id ); |
145 | 146 |
$d->ensure_customerdomain(); |
146 |
- db_query("UPDATE kundendaten.domains SET jabber=2 WHERE jabber=0 AND id={$d->id} LIMIT 1"); |
|
147 |
+ db_query("UPDATE kundendaten.domains SET jabber=2 WHERE jabber=0 AND id=?", array($d->id)); |
|
147 | 148 |
} |
148 | 149 |
|
149 | 150 |
|
... | ... |
@@ -22,7 +22,7 @@ require_once('inc/security.php'); |
22 | 22 |
function get_lists() |
23 | 23 |
{ |
24 | 24 |
$uid = (int) $_SESSION['userinfo']['uid']; |
25 |
- $result = db_query("SELECT id, status, listname, fqdn, admin, archivesize FROM mail.v_mailman_lists WHERE owner={$uid};"); |
|
25 |
+ $result = db_query("SELECT id, status, listname, fqdn, admin, archivesize FROM mail.v_mailman_lists WHERE owner=?", array($uid)); |
|
26 | 26 |
$ret = array(); |
27 | 27 |
while ($list = $result->fetch()) |
28 | 28 |
$ret[] = $list; |
... | ... |
@@ -33,9 +33,9 @@ function get_lists() |
33 | 33 |
|
34 | 34 |
function get_list($id) |
35 | 35 |
{ |
36 |
- $id = (int) $id; |
|
37 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
38 |
- $result = db_query("SELECT id, status, listname, fqdn, admin, archivesize FROM mail.v_mailman_lists WHERE owner={$uid} AND id={$id};"); |
|
36 |
+ $args = array(":id" => $id, |
|
37 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
38 |
+ $result = db_query("SELECT id, status, listname, fqdn, admin, archivesize FROM mail.v_mailman_lists WHERE owner=:uid AND id=:id", $args); |
|
39 | 39 |
if ($result->rowCount() < 1) |
40 | 40 |
system_failure('Die gewünschte Mailingliste konnte nicht gefunden werden'); |
41 | 41 |
$list = $result->fetch(); |
... | ... |
@@ -47,26 +47,28 @@ function get_list($id) |
47 | 47 |
|
48 | 48 |
function delete_list($id) |
49 | 49 |
{ |
50 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
51 |
- $id = (int) $id; |
|
52 |
- db_query("UPDATE mail.mailman_lists SET status='delete' WHERE owner={$uid} AND id={$id};"); |
|
50 |
+ $args = array(":id" => $id, |
|
51 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
52 |
+ db_query("UPDATE mail.mailman_lists SET status='delete' WHERE owner=:uid AND id=:id", $args); |
|
53 | 53 |
} |
54 | 54 |
|
55 | 55 |
|
56 | 56 |
function create_list($listname, $maildomain, $admin) |
57 | 57 |
{ |
58 | 58 |
verify_input_username($listname); |
59 |
- $maildomain = maybe_null( (int) $maildomain ); |
|
60 |
- $owner = (int) $_SESSION['userinfo']['uid']; |
|
61 | 59 |
verify_input_general($admin); |
62 | 60 |
if (! check_emailaddr($admin)) |
63 | 61 |
system_failure('Der Verwalter muss eine gültige E-Mail-Adresse sein ('.$admin.').'); |
64 |
- $admin = db_escape_string($admin); |
|
65 |
- $result = db_query("SELECT id FROM mail.mailman_lists WHERE listname='{$listname}'"); |
|
62 |
+ $result = db_query("SELECT id FROM mail.mailman_lists WHERE listname=?", array($listname)); |
|
66 | 63 |
if ($result->rowCount() > 0) |
67 | 64 |
system_failure('Eine Liste mit diesem Namen existiert bereits (unter dieser oder einer anderen Domain). Jeder Listenname kann nur einmal verwendet werden.'); |
68 | 65 |
|
69 |
- db_query("INSERT INTO mail.mailman_lists (status, listname, maildomain, owner, admin) VALUES ('pending', '{$listname}', {$maildomain}, {$owner}, '{$admin}');"); |
|
66 |
+ $args = array(":listname" => $listname, |
|
67 |
+ ":maildomain" => $maildomain, |
|
68 |
+ ":owner" => $_SESSION['userinfo']['uid'], |
|
69 |
+ ":admin" => $admin); |
|
70 |
+ |
|
71 |
+ db_query("INSERT INTO mail.mailman_lists (status, listname, maildomain, owner, admin) VALUES ('pending', :listname, :maildomain, :owner, :admin)", $args); |
|
70 | 72 |
DEBUG('Neue ID: '.db_insert_id()); |
71 | 73 |
} |
72 | 74 |
|
... | ... |
@@ -74,7 +76,7 @@ function create_list($listname, $maildomain, $admin) |
74 | 76 |
function get_mailman_domains() |
75 | 77 |
{ |
76 | 78 |
$uid = (int) $_SESSION['userinfo']['uid']; |
77 |
- $result = db_query("SELECT md.id, md.fqdn FROM mail.v_mailman_domains AS md left join mail.v_domains AS d on (d.id=md.domain) where d.user={$uid}"); |
|
79 |
+ $result = db_query("SELECT md.id, md.fqdn FROM mail.v_mailman_domains AS md left join mail.v_domains AS d on (d.id=md.domain) where d.user=?", array($uid)); |
|
78 | 80 |
$ret = array(); |
79 | 81 |
while ($dom = $result->fetch()) |
80 | 82 |
$ret[] = $dom; |
... | ... |
@@ -16,8 +16,7 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r |
16 | 16 |
|
17 | 17 |
function account_has_totp($username) |
18 | 18 |
{ |
19 |
- $username = db_escape_string($username); |
|
20 |
- $result = db_query("SELECT id FROM mail.webmail_totp WHERE email='{$username}'"); |
|
19 |
+ $result = db_query("SELECT id FROM mail.webmail_totp WHERE email=?", array($username)); |
|
21 | 20 |
if ($result->rowCount() > 0) { |
22 | 21 |
$tmp = $result->fetch(); |
23 | 22 |
$id = $tmp['id']; |
... | ... |
@@ -31,8 +30,8 @@ function account_has_totp($username) |
31 | 30 |
|
32 | 31 |
function validate_password($username, $password) |
33 | 32 |
{ |
34 |
- $username = db_escape_string($username); |
|
35 |
- $result = db_query("SELECT account, cryptpass FROM mail.courier_mailaccounts WHERE account='{$username}' UNION SELECT account, cryptpass FROM mail.courier_virtual_accounts WHERE account='{$username}'"); |
|
33 |
+ $args[":username"] = $username; |
|
34 |
+ $result = db_query("SELECT account, cryptpass FROM mail.courier_mailaccounts WHERE account=:username UNION SELECT account, cryptpass FROM mail.courier_virtual_accounts WHERE account=:username", $args); |
|
36 | 35 |
if ($result->rowCount() != 1) { |
37 | 36 |
// Kein Account mit dem Namen oder Name nicht eindeutig |
38 | 37 |
return false; |
... | ... |
@@ -58,12 +57,12 @@ function store_webmail_password($username, $oldpw, $newpw) |
58 | 57 |
for ($i = 0 ; $i != strlen($oldpw) ; $i++) { |
59 | 58 |
$code .= chr( ord($oldpw[$i]) ^ ord($secret[$i]) ); |
60 | 59 |
} |
61 |
- $code = base64_encode($code); |
|
62 |
- DEBUG(array($oldpw, $newpw, $code)); |
|
60 |
+ DEBUG(array($oldpw, $newpw)); |
|
61 |
+ $args = array(":uid" => $_SESSION['userinfo']['uid'], |
|
62 |
+ ":username" => $username, |
|
63 |
+ ":code" => base64_encode($code)); |
|
63 | 64 |
|
64 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
65 |
- |
|
66 |
- db_query("REPLACE INTO mail.webmail_totp (useraccount, email, webmailpass) VALUES ({$uid}, '{$username}', '{$code}')"); |
|
65 |
+ db_query("REPLACE INTO mail.webmail_totp (useraccount, email, webmailpass) VALUES (:uid, :username, :code)", $args); |
|
67 | 66 |
} |
68 | 67 |
|
69 | 68 |
|
... | ... |
@@ -87,8 +86,7 @@ function decode_webmail_password($crypted, $webmailpw) |
87 | 86 |
|
88 | 87 |
|
89 | 88 |
function get_imap_password($username, $webmailpass) { |
90 |
- $username = db_escape_string($username); |
|
91 |
- $result = db_query("SELECT webmailpass FROM mail.webmail_totp WHERE email='{$username}'"); |
|
89 |
+ $result = db_query("SELECT webmailpass FROM mail.webmail_totp WHERE email=?", array($username)); |
|
92 | 90 |
$tmp = $result->fetch(); |
93 | 91 |
|
94 | 92 |
$crypted = $tmp['webmailpass']; |
... | ... |
@@ -107,21 +105,20 @@ function check_webmail_password($username, $webmailpass) |
107 | 105 |
|
108 | 106 |
function generate_secret($username) |
109 | 107 |
{ |
110 |
- $username = db_escape_string($username); |
|
111 | 108 |
require_once('external/googleauthenticator/GoogleAuthenticator.php'); |
112 | 109 |
$ga = new PHPGangsta_GoogleAuthenticator(); |
113 | 110 |
|
114 | 111 |
$secret = $ga->createSecret(); |
115 | 112 |
DEBUG('GA-Secret: '.$secret); |
116 | 113 |
DEBUG('QrCode: '.$ga->getQRCodeGoogleUrl('Blog', $secret)); |
117 |
- db_query("UPDATE mail.webmail_totp SET totp_secret='{$secret}' WHERE email='{$username}'"); |
|
114 |
+ $args = array(":secret" => $secret, ":username" => $username); |
|
115 |
+ db_query("UPDATE mail.webmail_totp SET totp_secret=:secret WHERE email=:username", $args); |
|
118 | 116 |
return $secret; |
119 | 117 |
} |
120 | 118 |
|
121 | 119 |
function check_locked($username) |
122 | 120 |
{ |
123 |
- $username = db_escape_string($username); |
|
124 |
- $result = db_query("SELECT 1 FROM mail.webmail_totp WHERE unlock_timestamp IS NOT NULL and unlock_timestamp > NOW() AND email='{$username}'"); |
|
121 |
+ $result = db_query("SELECT 1 FROM mail.webmail_totp WHERE unlock_timestamp IS NOT NULL and unlock_timestamp > NOW() AND email=?", array($username)); |
|
125 | 122 |
return ($result->rowCount() > 0); |
126 | 123 |
} |
127 | 124 |
|
... | ... |
@@ -131,9 +128,7 @@ function check_totp($username, $code) { |
131 | 128 |
return false; |
132 | 129 |
} |
133 | 130 |
|
134 |
- $username = db_escape_string($username); |
|
135 |
- |
|
136 |
- $result = db_query("SELECT totp_secret, failures FROM mail.webmail_totp WHERE email='{$username}' AND (unlock_timestamp IS NULL OR unlock_timestamp <= NOW())"); |
|
131 |
+ $result = db_query("SELECT totp_secret, failures FROM mail.webmail_totp WHERE email=? AND (unlock_timestamp IS NULL OR unlock_timestamp <= NOW())", array($username)); |
|
137 | 132 |
$tmp = $result->fetch(); |
138 | 133 |
$secret = $tmp['totp_secret']; |
139 | 134 |
|
... | ... |
@@ -147,9 +142,9 @@ function check_totp($username, $code) { |
147 | 142 |
DEBUG('OK'); |
148 | 143 |
} else { |
149 | 144 |
if ($tmp['failures'] > 0 && $tmp['failures'] % 5 == 0) { |
150 |
- db_query("UPDATE mail.webmail_totp SET failures = failures+1, unlock_timestamp = NOW() + INTERVAL 5 MINUTE WHERE email='{$username}'"); |
|
145 |
+ db_query("UPDATE mail.webmail_totp SET failures = failures+1, unlock_timestamp = NOW() + INTERVAL 5 MINUTE WHERE email=?", array($username)); |
|
151 | 146 |
} else { |
152 |
- db_query("UPDATE mail.webmail_totp SET failures = failures+1 WHERE email='{$username}'"); |
|
147 |
+ db_query("UPDATE mail.webmail_totp SET failures = failures+1 WHERE email=?", array($username)); |
|
153 | 148 |
} |
154 | 149 |
|
155 | 150 |
DEBUG('FAILED'); |
... | ... |
@@ -194,9 +189,9 @@ function generate_qrcode_image($secret) { |
194 | 189 |
|
195 | 190 |
function accountname($id) |
196 | 191 |
{ |
197 |
- $id = (int) $id; |
|
198 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
199 |
- $result = db_query("SELECT email FROM mail.webmail_totp WHERE id={$id} AND useraccount={$uid}"); |
|
192 |
+ $args = array(":id" => $id, |
|
193 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
194 |
+ $result = db_query("SELECT email FROM mail.webmail_totp WHERE id=:id AND useraccount=:uid", $args); |
|
200 | 195 |
if ($tmp = $result->fetch()) { |
201 | 196 |
return $tmp['email']; |
202 | 197 |
} |
... | ... |
@@ -205,26 +200,24 @@ function accountname($id) |
205 | 200 |
|
206 | 201 |
function delete_totp($id) |
207 | 202 |
{ |
208 |
- $id = (int) $id; |
|
209 |
- $uid = (int) $_SESSION['userinfo']['uid']; |
|
203 |
+ $args = array(":id" => $id, |
|
204 |
+ ":uid" => $_SESSION['userinfo']['uid']); |
|
210 | 205 |
|
211 |
- db_query("DELETE FROM mail.webmail_totp WHERE id={$id} AND useraccount={$uid}"); |
|
206 |
+ db_query("DELETE FROM mail.webmail_totp WHERE id=:id AND useraccount=:uid", $args); |
|
212 | 207 |
} |
213 | 208 |
|
214 | 209 |
|
215 | 210 |
function blacklist_token($email, $token) |
216 | 211 |
{ |
217 |
- $email = db_escape_string($email); |
|
218 |
- $token = db_escape_string($token); |
|
219 |
- db_query("INSERT INTO mail.webmail_totp_blacklist (timestamp, email, token) VALUES (NOW(), '{$email}', '{$token}')"); |
|
212 |
+ $args = array(":email" => $email, ":token" => $token); |
|
213 |
+ db_query("INSERT INTO mail.webmail_totp_blacklist (timestamp, email, token) VALUES (NOW(), :email, :token)", $args); |
|
220 | 214 |
} |
221 | 215 |
|
222 | 216 |
function check_blacklist($email, $token) |
223 | 217 |
{ |
224 |
- $email = db_escape_string($email); |
|
225 |
- $token = db_escape_string($token); |
|
218 |
+ $args = array(":email" => $email, ":token" => $token); |
|
226 | 219 |
db_query("DELETE FROM mail.webmail_totp_blacklist WHERE timestamp < NOW() - INTERVAL 10 MINUTE"); |
227 |
- $result = db_query("SELECT id FROM mail.webmail_totp_blacklist WHERE email='{$email}' AND token='{$token}'"); |
|
220 |
+ $result = db_query("SELECT id FROM mail.webmail_totp_blacklist WHERE email=:email AND token=:token", $args); |
|
228 | 221 |
return ($result->rowCount() > 0); |
229 | 222 |
} |
230 | 223 |
|
231 | 224 |