【发布时间】:2018-12-13 19:19:53
【问题描述】:
我必须使用随机唯一密码更新所有现有用户的密码。我有大约 4000 个用户使用 SQL SERVER。
我的代码是
$userSQL = "SELECT a002UserID FROM tbl002password WHERE a002UserID LIKE 'non%'";
$userrs = $db->query($userSQL);
$userList1 = array();
while($row = $userrs->fetch(PDO::FETCH_OBJ)){
$userList1[] = $row->a002UserID;
}
foreach($userList1 as $uid){
function generatePassword ($length = 8)
{
$password = '';
$chars = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
for ($i = 0; $i < $length; $i ++) {
$password .= $chars[array_rand($chars)];
}
return $password;
}
$pass_gen = generate_password();
$insertPass = "UPDATE tbl002password SET a002password = '$pass_gen' WHERE a002UserID = '$uid'";
$db->exec($insertPass);
echo "updated $uid";
}
如果删除'for'循环
- 当我只为一个用户运行查询时,它运行良好。
- 选择所有用户时为所有用户分配相同的密码。
【问题讨论】:
-
看起来容易出现竞争条件,因为您先选择然后更新。此外,它看起来也容易出现 SQL 注入。如果外部世界无法访问此代码并且只有一个用户在运行,则忘记我所说的了。乍一看,您需要将函数
generatePassword()放在循环之外。 -
不要存储纯文本密码,对它们进行哈希处理。
-
我确实将函数放在了循环之外,但它不起作用。
标签: php sql sql-server