2017-06-17 68 views
2

PHP包含一对函数来生成和验证密码,我相信使用BCrypt。这使得使用存储在数据库表中的密码哈希变得容易。为没有PHP的数据库生成PHP密码

唯一的问题是,它使得使用普通数据库客户端手动添加密码变得困难。通常我最终创建一个小PHP脚本来添加或编辑用户行。

现在的问题是:是否有函数或库可以添加到各种数据库实现相同的散列PHP?如果没有,有没有独立的应用程序?

这个问题涉及流行的Web数据库,PotgreSQL,MySQL和SQLite。我个人使用Mac和Linux进行Web开发,但我经常在Windows上教授。

+0

您要求*资源*?这在SO上将成为* off-topic *。如果你的问题涉及到编程,我不清楚。如果这是你的问题,你可以通过不同的编程语言使用相同的加密方法。尽管如此,你必须自己写自己的方式,**请小心! – Nytrix

+0

你的意思是密码破解和password_verify的原生mysql函数等价物吗? – barudo

回答

3

据我所知,没有MySQL函数可用来模拟password_hash()password_verify()。有一个很好的性能原因:他们使用了许多昂贵的哈希轮。关键是要放慢试图猜测密码的cybercreeps。在大多数网络系统中,数据库管理系统是稀缺资源,所以你不想用半秒的CPU磨削计算来加重它。最好将这个工作负载放在一个可以在负载平衡器池中复制的Web服务器上。

您在小型(安全的)php程序中构建密码重置功能的方法是正确的。您也可能想要构建自助式密码恢复功能。 WordPress有一个很好的例子:它向用户发送一封包含一次性使用链接的电子邮件(链接中有一个nonce)到一个提示输入新密码的页面。

+0

感谢您的回答。我想我可以轻松编写一个PHP脚本并将其用作Ajax服务。 – Manngo

0

PostgreSQL带有一个方便的第三部分扩展名为pg_crypto。它增加了散列函数和对称密钥加密算法。

我更喜欢使用密码加密&验证数据库在网络环境中有以下几个原因:

  1. crypt从pgcrypto方法比任何PHP方法更加灵活。可以迁移散列算法并在数据库中同时使用两种加密算法。这使得密码更新时可以进行最强大的加密。
  2. 从性能角度来看,Web服务器经常被加载,而数据库有很多使用索引的小型只读查询。也可以将认证查询分配到多个辅助数据库服务器上。
  3. 从安全角度来看,网络服务器可以使用数据库用户不允许阅读user.account表的邮件,散列密码所在的位置。要验证用户,应用程序必须使用SECURITY DEFINER SQL函数,该函数仅在提供的密码正确时才返回用户帐户信息。这可以确保攻击者从任何Web服务器获取对数据库的访问权限都无法访问帐户信息,也无法写入数据库。