我正在研究一些旨在部署到用户服务器的 PHP——可能是廉价/共享主机(意味着最低公分母PHP 5.2,没有修改 PHP 安装)。密码哈希的常见建议似乎是 bcrypt 或 scrypt,通过 PHP 5.2 的可安装扩展。
我一直在考虑使用具有强大的每用户盐的迭代 SHA-512,但它听起来不像真的与 bcrypt/scrypt 相比。
如果无法修改基本 PHP 安装,我有哪些选项可以确保密码安全?
我正在研究一些旨在部署到用户服务器的 PHP——可能是廉价/共享主机(意味着最低公分母PHP 5.2,没有修改 PHP 安装)。密码哈希的常见建议似乎是 bcrypt 或 scrypt,通过 PHP 5.2 的可安装扩展。
我一直在考虑使用具有强大的每用户盐的迭代 SHA-512,但它听起来不像真的与 bcrypt/scrypt 相比。
如果无法修改基本 PHP 安装,我有哪些选项可以确保密码安全?
我要说的第一件事是不应该考虑 PHP 5.2。它在近两年前被宣布报废,当时还没有任何安全补丁,所以任何仍在使用它的主机显然都不会认真对待安全性。这些天您应该将 5.3 视为最低版本。
不用密码...
下一版本的 PHP (v5.5) 将具有一组内置函数,可提供标准化的密码散列。这个想法是一劳永逸地摆脱 PHP 中错误密码实践的任何借口。一旦此版本发布,这将是唯一推荐的处理密码的方法。
同时,您可以下载一个兼容库,它为当前的 PHP 版本实现了相同的功能。从这里下载:https ://github.com/ircmaxell/password_compat
我的建议是使用这个库,包含在一个if(function_exists())
包装器中。这样,您将使用最佳实践,并准备好在 5.5 发布时使用内置函数。
另请参阅:http ://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.html以供参考。
希望有帮助。
如对原始问题的评论中所述,可在http://crackstation.net/hashing-security.htm获得 PBKDF2 的 PHP < 5.2 实现。
PBKDF2 可以说是比 bcrypt/scrypt 更好的选择,它经过了更彻底的研究和测试。