【发布时间】:2016-04-21 20:53:59
【问题描述】:
我现在正在使用的登录表单使用用户电子邮件地址和密码登录。 所以我在想,有什么理由不应该在电子邮件地址上使用 bcrypt:
$email_hash = password_hash($email, PASSWORD_DEFAULT);
我知道它是用于密码的,但那又怎样?也应该在电子邮件上工作......如果使用电子邮件登录,它不应该像密码一样被散列/加盐吗?我知道这不是标准做法,但一直不明白为什么。
我不一定需要知道用户的电子邮件地址。我的意思是,我不会和他们聊天。也许当用户被禁止时,我应该通过电子邮件通知他们,但为什么还要首先通知不法分子。
【问题讨论】:
-
没有理由不这样做,节省成本。如果有人入侵了您的数据库,他们将无法获取电子邮件地址 - 您也不会。所以,如果你需要用户的电子邮件地址来做其他事情,你会被淹没。
-
电子邮件用于交流。如果您对所有用户的电子邮件地址进行哈希处理,您将如何通过网站新闻/更新/密码重置等联系他们?没必要。如果您担心您的数据库被劫持,只需确保您的软件是最新的,并使用大量其他基于安全的措施来防止这种情况发生。
-
您需要用户名(电子邮件地址)才能登录。如果您使用
password_hash对用户名进行哈希处理,您每次都会得到不同的值,所以唯一的查找用户记录的方法是尝试每个哈希值,看看是否匹配。 -
@Arjan 提供的理由是最好的理由。
-
@Arjan 显而易见的解决方案是使用
password_verify()作为电子邮件地址。