为没有PHP

时间:2017-06-17 09:28:24

标签: php mysql postgresql sqlite passwords

PHP包含一对生成和验证密码的函数,我相信它使用BCrypt。这样可以很容易地使用存储在数据库表中的密码哈希值。

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

问题是:是否有可以添加到各种数据库的函数或库,它们实现与PHP相同的散列?如果不这样做,是否有任何独立的应用程序?

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

2 个答案:

答案 0 :(得分:3)

据我所知,没有可用于模拟password_hash()password_verify()的MySQL函数。有一个很好的性能原因:它们使用了许多轮昂贵的散列。重点是减慢试图猜测密码的网络蠕虫。在大多数Web系统中,DBMS是稀缺资源,因此您不希望使用半秒cpu-grinding计算来加重它。最好将该工作负载放在可以在负载平衡器池中复制的Web服务器上。

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

答案 1 :(得分:0)

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

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

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