假设用户正在网站上创建帐户.用户提供的电子邮件地址保存在mysql中,但在保存之前进行哈希处理.这样一来,可能的黑客就不会看到电子邮件地址了.但另一方面,对于我或你("程序员"),没有办法看到用户是否正在尝试使用相同的电子邮件地址(我真的想要阻止)创建一个帐户.
问题:一般来说,您对解决这个问题的建议是什么?任何建议或解决方案表示赞赏?
问题:在散列电子邮件地址时,帐户会更加"安全"吗?
PS FYI,这个应用程序使用PHP作为服务器语言.
更新:
unique在email列上添加索引.这将阻止添加具有相同email字段的任何其他行.没错,顺利.
假设您的表是,users并且您将电子邮件存储在email_hashed:
ALTER TABLE users
ADD UNIQUE (email_hashed)
Run Code Online (Sandbox Code Playgroud)
如果你已经有重复,在申请之前需要先清洁.
.
只需SELECT使用该哈希散列电子邮件和数据库中的所有行.像那样:
$email = 'ex@example.com';
$hashed = someHashing($email);
$sql = ("SELECT id FROM users WHERE email_hashed = '$email'");
..
Run Code Online (Sandbox Code Playgroud)
如果将获取任何行,那么您可以执行诸如显示消息,错误或任何内容之类的操作.
我建议使用两种解决方案.
所以是的,你正在使用BCrypt.如果你想哈希电子邮件,有两种方法(不知道为什么,但无论如何!).你会被所有人和更好的人嘲笑的那一个.
第一个(可笑的)是:
SELECT 从数据库整个表中包含每个可能存在的电子邮件哈希值 foreach() {}循环遍历数据库中的每个哈希 password_verify()true则运行您自己的一些代码第二个很简单:
md5(使用md5('text')功能)或sha256更长的散列(使用hash('sha256','text'))问题:在散列电子邮件地址时,帐户会更加"安全"吗?
我认为在StackOverflow上加注并不是问题,但由于它是"奖金",我会在这里提出一些想法.
我不是安全专家,所以我可能不知道什么.
无论如何,用密码散列密码BCrypt并确保帐户上的任何内容都不能以任何不需要密码的方式进行编辑(如有缺陷的API或受损的管理仪表板).我认为你还应该保护易受攻击的数据(如姓名,地址,电话号码等)免受公共访问.
散列电子邮件只有我能想到的一个目的.在成功破解的情况下,倾倒所有数据库的人将无法获得任何单个电子邮件地址.那很好.但它也会阻止您发送简报,帐户到期通知和其他重要电子邮件.
在90%的网站中,我会说"哈希电子邮件,你疯了吗?",但如果你根本不需要重复使用电子邮件(除了注册邮件之外你不会发送任何电子邮件),并希望用户的电子邮件是非常安全,然后是的,散列可以证明是有用的.但请,不,BCryptP:
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |