【问题标题】:mysql email stored and used for recoverymysql 电子邮件存储并用于恢复
【发布时间】:2011-05-31 18:35:45
【问题描述】:

我想做一张桌子。我的用户给我他们的电子邮件地址,然后将其存储在数据库中。如果他们需要将登录详细信息重新发送给他们,他们可以输入此电子邮件地址,系统将检查它是否存在,如果存在,将向他们发送一封包含登录详细信息的电子邮件。

什么数据库结构最适合这个?

存储入侵数据库的每个人都看不到的电子邮件的最佳方法是什么?请记住,我只会根据数据库检查另一个值,而不需要将实际电子邮件地址存储为输出?

【问题讨论】:

    标签: security email mysql


    【解决方案1】:

    如果您只需要检查电子邮件是否在系统中,您可能应该存储某种散列(MD5 或 SHA,两者都是 MySQL 本机支持的)而不是实际的电子邮件地址。哈希是一种单向加密,这意味着您无法从转换后的哈希文本中检索电子邮件地址,但您可以从电子邮件地址重新创建哈希。

    这里对如何在 MySQL 中存储 SHA1 字符串进行了很好的讨论: Storing SHA1 hash values in MySQL

    如果您的表格如下所示:

    userid: INT
    emailhash: CHAR(40)
    

    您可以通过如下查询来检查电子邮件地址是否存在:

    SELECT userid FROM tablename WHERE SHA1([e-mail address from user]) = emailhash;
    

    如果它返回结果,那么您知道与电子邮件地址匹配的用户 ID,您可以向您从用户那里收集的电子邮件地址发送电子邮件。 (请记住,您将无法从数据库中检索电子邮件地址。)

    这里有更多关于 MySQL 加密算法的注释: http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

    【讨论】:

    • 谢谢,这正是我所需要的。我只是在想,通常可以将文本电子邮件地址存储在数据库中吗?我的意思是它通常足够安全吗?
    • 是的——看我的回答。电子邮件是公开的东西。认识他们的人并不坏——尽管他们可以用他们做半坏事。密码是私人的东西。认识他们的人不好。
    • 很奇怪。我的名字也是埃文,我在那里很困惑一秒钟。无论如何,我同意我的同名观点,除非您在医疗保健或其他敏感领域工作,否则将未加密的电子邮件存储在您的数据库中通常不是一件坏事。
    【解决方案2】:

    什么数据库结构最适合这个?

    使用电子邮件为 varchar 的表格。您应该使用 utf8,以便人们可以在他们的电子邮件中使用时髦的字符并正确处理。

    存储入侵数据库的每个人都看不到的电子邮件的最佳方法是什么?

    您可以使用 md5 和“盐”对值进行散列 - 盐只是一些额外的东西(在本例中是一个字符串),可以为结果添加更多随机性。这样,如果有人知道哈希和原始电子邮件地址,他们就无法简单地找出您使用的哈希函数。

    然后,如果您想查看电子邮件地址是否已经存在 - 获取提供的电子邮件地址,添加盐,进行哈希,检查该值是否在数据库中。

    如果你这样做,你就知道哈希有多长,所以你可以把它变成一个长度正确的字符。这将使索引/查询更快。

    也就是说,没有理由对电子邮件地址执行此操作。密码应始终以散列形式存储。电子邮件地址是公开的东西,但如果其他人知道它并不“坏”。如果有人知道某人的密码,那就“不好”了。

    尽管提供更多信息,您应该尽可能地防止人们入侵您的数据库。如果他们可以破解您的数据库,他们也可能能够破解您的代码。如果他们这样做,他们可以看到您的哈希函数和盐。

    【讨论】:

      【解决方案3】:

      此外,您不应该重新发送他们的密码,因为无论如何您都不应该使用明文形式。

      要么发送一个新密码,(在使用新密码之前让旧密码正常运行,以防止有人更改另一个密码)或发送带有哈希的链接以重置密码。

      【讨论】:

        猜你喜欢
        • 2011-11-27
        • 2011-10-09
        • 1970-01-01
        • 2011-06-26
        • 2018-12-14
        • 2011-10-07
        • 2015-03-02
        • 2017-08-02
        • 1970-01-01
        相关资源
        最近更新 更多