【发布时间】:2017-07-22 21:09:37
【问题描述】:
此时用户可以在我的网站(username, password, email)创建一个帐户
这将在数据库中创建一个条目,该条目存储用户名、密码的哈希值和电子邮件地址,并将用户的级别设置为 0。之后它将发送一封包含 id 的 url 的电子邮件用户和哈希密码的新哈希。
$emailhash = password_hash($passwordHash, PASSWORD_BCRYPT, $options);
$url = "domain/validation.php?id=$id&hash=$emailHash";
在 url 指向的验证页面,它将使用哈希密码作为密码和电子邮件中的哈希来检查用户是否使用现有的电子邮件地址。
password_verify(hashedPasswordFromDB, hashOfHashFromEmail);
这是验证用户的安全方法,还是我应该为额外的哈希添加额外的表/列?我当前的方法和/或其他方法的优点/缺点是什么? (例如,更简单的表格...)
编辑: 如果用户想要更改他的电子邮件地址(我现在正在添加的东西),我想实现相同的方法(发送一个包含 id、新电子邮件地址和哈希密码的新哈希的 url +新的电子邮件地址)。在我看来,这看起来有点曲折,但我没有看到其他方法来改变它。
【问题讨论】:
-
这对我来说看起来不错...这就是我进行“电子邮件验证”的方式。
-
为什么要涉及密码?如果您使用的是 PHP,我希望您使用的是 php.net/manual/en/function.password-hash.php。只需使用一些随机输入和电子邮件地址本身创建一个单独的 sha1 哈希,并将其用作哈希的输入。
-
我在用户上有一个验证令牌列,一个随机字符串,当用户点击链接时,它与用户匹配。
-
@PraveenKumar 您如何使用该设置处理电子邮件更改?
-
@Hedylogos 查看我的答案以获得更灵活的系统。如果您想允许更改电子邮件地址,则可以轻松适应。当然,您需要为每种类型的事件单独处理代码。对于电子邮件更改,通常它的工作方式是用户提出请求,您向他们发送新的验证到他们请求的电子邮件,并且只有在他们验证后才进行更改。我添加了一个“额外”列,您可以在其中存储新电子邮件和旧电子邮件,以便您可以在用户验证请求时对请求采取行动。
标签: php mysql security registration