密码处理最佳做法?

jld*_*ger 6 encryption passwords

我们有许多网络服务和网络应用程序以不同方式对用户进行身份验证,其中一些具有不同的密码要求,原因非常糟糕.例如,一个系统拒绝$签名,直到有人"修复"某些Perl脚本中的字符串处理.另一个系统似乎解析@密码中的标志.另一个系统向用户发出密码,开发人员很自豪地告诉我这是用户名的可逆转换.

我知道密码哈希是首选; 但我想知道在向基于浏览器的软件过渡中必须牺牲多少.对于我自己的启发,并提出改变的案例,是否有关于密码处理和管理主题的权威参考,我可以在我的部门和那些负责其他服务的人员中展示?

Amb*_*ber 9

您可以对密码中允许的字符设置的限制越少越好 - 它会增加尝试暴力破解的人的搜索空间.理想情况下,没有理由在密码中禁止任何ASCII字符(除了控制字符和backspace/newline之类的东西).

至于长度限制,最小限制是好的(例如,不要通过设置最小长度10来惹恼用户),最大限制是不好的.如果有人想要一个50个字符的密码,那么让它们 - 只要你进行散列就不应该存储,因为散列的长度是恒定的.

始终以不可逆的哈希形式存储密码 - 理想情况下,密码安全密码形式.没有理由以可逆的形式存储它们(如果有人忘记了密码,只需为它们设置一个新密码,不要试图"检索"它).不要编写自己的哈希算法 - 很可能你不是加密专家,并且有很多好的,经过验证的哈希算法可以用于任何主流语言的实现(代码或库形式).

用足够长度的每用户盐盐洗你的哈希,以防止彩虹表开裂.

Pro PHP Security的第5章和第6章涉及密码的存储和加密:

一些相关文章:

  • 你在哪里画线"商店"?在RAM?在磁盘上?在整个网络? (3认同)

KFr*_*Fro 3

我建议您查看OWASP等网站。它们涉及更广泛的 Web 应用程序安全主题,其中密码保护当然是一个关键功能。我确信您会在那里找到更多信息。

还有像Foundstone这样的公司可以向您的开发团队传授最佳实践并审核您现有的应用程序。