PHP包含一对生成和验证密码的函数,我相信它使用BCrypt。这样可以很容易地使用存储在数据库表中的密码哈希值。
唯一的问题是它使得使用普通数据库客户端手动添加密码变得困难。通常我最终会创建一个小的PHP脚本来添加或编辑用户行。
问题是:是否有可以添加到各种数据库的函数或库,它们实现与PHP相同的散列?如果不这样做,是否有任何独立的应用程序?
这个问题涉及流行的Web数据库,PotgreSQL,MySQL和SQLite。我个人使用Mac和Linux进行Web开发,但我经常在Windows上教书。
答案 0 :(得分:3)
据我所知,没有可用于模拟password_hash()
或password_verify()
的MySQL函数。有一个很好的性能原因:它们使用了许多轮昂贵的散列。重点是减慢试图猜测密码的网络蠕虫。在大多数Web系统中,DBMS是稀缺资源,因此您不希望使用半秒cpu-grinding计算来加重它。最好将该工作负载放在可以在负载平衡器池中复制的Web服务器上。
在小型(安全)php程序中构建密码重置功能的方法是正确的。您可能还想构建自助密码恢复功能。 WordPress很好用:它会向用户发送一封电子邮件,其中包含一次性使用链接(其中包含nonce的链接)到提示输入新密码的页面。
答案 1 :(得分:0)
PostgreSQL附带了一个名为pg_crypto的便捷第三部分扩展。它增加了散列函数和对称密钥加密算法。
我更喜欢使用数据库进行密码加密&在Web环境中进行验证有以下几个原因:
crypt
方法比任何PHP方法都更灵活。可以迁移哈希算法并在数据库中同时具有两种加密算法。这可以在更新密码时获得最强的加密。user.account
表。要对用户进行身份验证,应用程序必须使用SECURITY DEFINER
SQL函数,该函数仅在提供的密码正确时才返回用户帐户信息。这可确保攻击者从任何Web服务器访问数据库都无法访问帐户信息,也无法写入数据库。