2012-06-07 59 views
0

在PHP中存储密码最安全的方法是什么?我非常感兴趣的是在使用我的应用程序时保护我的用户受到保护,并且我想用尽可能最好的方式来存储他们的密码。我已经阅读了各种加密方法,如MD5,SHA1等。我还阅读了“盐”和哈希。有人可以告诉我以PHP最安全的方式存储密码吗?在PHP中存储密码的最安全方法是什么?

+1

SHA512和盐 – zerkms

+2

又来了......我还没有去查找重复的这一个。 “不建设性”。 – 2012-06-07 00:39:59

+1

使用预先存在的,经过良好测试的[密码哈希库](http://www.openwall.com/phpass/)。不要'滚自己的'。 – PenguinCoder

回答

0

在将数据存储到数据库中之前,请先将您的密码加盐。在任何情况下,您都不能以纯文本格式存储密码。一旦散列后丢弃纯密码。

还使用会话变量来存储和跟踪用户会话。不要使用cookies,因为它们存储在浏览器中,并且可能会妥协。

有一个很好的密码策略。至少要确保每个密码都有一个最小长度,不是一个词典单词,不是全部数字,并且是上部和中间混合数字的混合。等谷歌对象密码策略会变成很多。

2

使用任何类型的散列存储密码不会保护您的系统,但它会阻止人们在系统遭到入侵时看到明文密码。安全来自良好的监督和良好实践。

Microsoft有这样的见解:

许多Web应用程序使用 密码机制对用户进行身份验证,用户在HTML表单提供一个 用户名和密码。到 的议题和问题考虑在这里包括:

  • 以明文在不安全 通道发送的用户名和密码?如果是这样,攻击者可以使用网络监控软件窃听软件来捕获证书。这里的对策是通过使用安全套接字层(SSL)来保护通信信道的 。
  • 如何存储凭证?如果您以纯文本形式存储用户名和 密码,无论是在文件中还是在数据库中,您都是 会招来麻烦。如果您的应用程序目录配置不正确 ,攻击者浏览该文件并下载其内容 或添加新的特权登录帐户?如果一个不满的 管理员将您的数据库用户名和密码拿走?
  • 如何验证凭证?如果 的唯一目的是验证用户知道密码值,则不需要存储用户密码。 相反,您可以将散列值形式的验证器存储起来,并在登录 过程中使用用户提供的值重新计算散列值。为了减轻字典攻击针对 凭证存储的威胁,请使用强密码并将随机产生的salt值与密码哈希组合。
  • 初始登录后如何识别经过身份验证的用户?某些形式的身份验证 票证(例如身份验证cookie)是必需的。 cookie如何保护?如果它通过不安全的通道发送,攻击者可以捕获cookie并使用它来访问应用程序。被盗的 认证cookie是被盗的登录。
+0

如果认证存储受到危害,使用*适当的*散列技术(以及*合适的* salt *和* HMAC)将减轻**总帐户损失**。如果假设是在店里*不能*妥协那就不会比存储明文更好,但*这种假设可能是危险的* ... – 2012-06-07 01:19:30

+0

@pst - 笑,编辑我的回答对一个封闭的问题 – afuzzyllama

+0

哈哈,确实。我编辑了我的评论为一个封闭的问题;-) – 2012-06-07 01:22:36

相关问题