使用openssl_random_pseudo_bytes(PHP)生成随机密码


Generate random password with openssl_random_pseudo_bytes (PHP)

在密码重置期间,我使用以下方法为用户生成随机密码

$pass = preg_replace('/=*$/', '', base64_encode(openssl_random_pseudo_bytes(40)));

我想它们对于这个目的来说已经足够随机了,对吧?上述方法或其他更好的方法是否存在风险?

函数应该可以很好地生成随机字符串。

不过,发送密码的不利之处在于,每个看到电子邮件的人都可以登录你的网站。通常情况下,即使在几年后,这也是可能的,因为用户不会更改密码。另一件事是,每个bdoy都可以重置用户密码,重复这样做对用户来说真的很烦人。

解决这个问题的通常方法是,向用户发送一个包含令牌的链接(可以使用您的函数完成)。您将此令牌的哈希存储在数据库中。如果用户单击链接,并且包含的令牌的哈希与您的数据库条目匹配,则允许用户自己选择新密码。