【问题标题】:Question about Saving passwords in Database关于在数据库中保存密码的问题
【发布时间】:2011-10-24 22:55:42
【问题描述】:

我目前正在阅读一本关于 PHP/MySQL 的书。我主要对密码的散列感兴趣。明文通过 md5/sha1 或一些哈希函数转换为“乱码”并存储在数据库中。好吧,我明白了。黑客,即使他们获得了对数据库的访问权限,仍然存在查找明文的问题。

我的问题(我希望这不是愚蠢的)是,在大多数(或所有人都想到)有用户密码的网站上,如果用户忘记了他/她的密码,那么网络管理员会将其发送到用户的电子邮件.好的,但是网络管理员如何拥有明文密码?

【问题讨论】:

  • 您是否使用任何有登录名/密码的网站?在密码恢复政策方面,您认为哪一项最有吸引力?找到一个并效仿 - 然后提出具体问题 - 你当前的问题太哲学化和投机性......
  • @Daniel “网络管理员如何获得明文密码?”这几乎不是一个哲学问题,但它是推测性的。但是,他们可以将密码作为明文的方式只有这么多……我能想到 3 种。
  • 不幸的是,这个问题非常愚蠢,因为网站不会向用户提供明文。出于某种原因,我认为他们做到了。
  • @Adam - 是的,这个问题很好,但它让人不回答它,而是指出另一个方向。例如,“编写 c# 代码的最佳十六进制编辑器是什么?”会与此类似。
  • @Daniel 好吧,我回答了这个问题,我希望当网站可以为您提供密码时通常会发生这种情况。我觉得你的比喻有点不对。我相信这个问题是完全可以回答的,尽管你往往会得到“我知道的大多数网站不这样做”,或者“他不应该这样做!” - 这在技术上是在回避这个问题。

标签: sql passwords md5 sha1


【解决方案1】:

如果密码可以发回给您,则它没有经过哈希处理 - 它已(希望!)已加密。从广义上讲,散列不是可逆的动作。散列后,与它进行比较的唯一方法是以相同的方式散列该内容并查看散列是否相同。你永远无法真正“取消哈希”它。

总之,它不应该是明文。如果他们拥有它并且可以将其发送给您,则它应该被加密。他们是否应该保留加密版本是安全顾问争论的焦点。也就是说,它可能是明文。归根结底,“密码”没有什么特别之处,它们只是字符串,可以按原样存储 - 但是因为它们构成了保护事物的重要密钥,所以您希望它们得到妥善处理。

人们认为应该这样做的常见方式是加盐和散列。我认为这是最好的常用方法,如果你的散列算法不错。有些事情需要注意,但这超出了这个答案的范围。

Best way to store password in database

令人震惊的故事:

我曾经有一位来自英国宽带提供商的客户服务代表告诉我我的密码是什么...当人们以可逆格式存储我的密码时,我有点粗略,我觉得非常 担心他们允许客户服务人员看到该密码,而客户服务人员是安全系统的一个弱点。出于这个原因,我已经离开了这个提供商。

【讨论】:

    【解决方案2】:

    我认为我从未见过这样做的网站。通常他们会向您发送一个链接,当您单击该链接时,它会重置您的密码并将您发送到您必须输入新密码的页面。有些网站会向您发送一个临时密码并敦促您更改它。请注意,在这两种情况下,网站都不需要原始明文。

    如果我点击了密码重置链接并以明文形式发送了我的原始密码,我对该网站的评价会很低!

    【讨论】:

    • 想想吧。我想你是对的。他们通常会发送一个默认的,对吧。我很确定我已经看到我的密码从一两个网站发回了我的电子邮件。
    • @JJG - 在这种情况下,他们可能不使用哈希(你不会同时使用)
    【解决方案3】:

    所有好的网站都不会发送密码,而是发送设置新密码的链接。这使他们可以避免使用明文密码。

    【讨论】:

      【解决方案4】:

      他不能 - 如果您使用的网站具有向您发送您自己的密码的功能,您应该考虑切换到另一个网站,因为这个网站根本不安全并且以明文形式存储密码。 唯一应该可用的功能是将密码重置为一些随机值。

      【讨论】:

      • 从技术上讲,他可以,但他绝对不应该!
      【解决方案5】:

      只有当他的散列算法很弱时,网络管理员才能向您提供您的明文密码,他有办法检索您的明文密码,并且有能力将您的明文密码发回给您。当然,如果密码根本没有经过哈希处理,那么很容易发回您的明文密码。但你为什么要一个?根据 kstaruch 的建议,切换到另一个站点,因为这样的站点非常不安全。

      如果用户忘记了密码,则为用户提供重置密码的选项。当然,在您给他这个选项之前,请务必先验证他的身份(可能是秘密问题)。

      【讨论】:

        【解决方案6】:

        您不会以明文或任何形式的对称加密密码存储任何密码,除非您的目标是有一天像 SONY 一样受欢迎。

        第一:

        http://www.engadget.com/2011/04/26/sony-provides-psn-update-confirms-a-compromise-of-personal-inf/

        然后:

        How should i save my Password?

        还有:

        您应该尝试在客户端对密码进行哈希处理,除非您使用的是 https 协议,这可能是矫枉过正,但尝试找到一些 javascript HASH 函数,使您能够将密码的哈希发送到服务器进行验证.

        【讨论】:

          猜你喜欢
          • 2010-11-27
          • 1970-01-01
          • 2011-09-15
          • 2011-09-30
          • 2020-07-06
          • 2013-03-22
          • 2017-04-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多