【问题标题】:Generating PHP Passwords for a database without PHP为没有 PHP 的数据库生成 PHP 密码
【发布时间】:2017-11-20 00:55:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您要资源?在 SO 上,这将是 off-topic。如果您的问题与编程有关,我不清楚。如果这是您的问题,您可以通过不同的编程语言使用相同的加密方法。不过,您必须编写自己的方式,小心!
  • 你的意思是password_hash和password_verify的本地mysql函数等价物吗?

标签: php mysql postgresql sqlite passwords


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我想我可以轻松编写一个 PHP 脚本并将其用作 Ajax 服务。
【解决方案2】:

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

我更喜欢在网络环境中使用数据库进行密码加密和验证,原因如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-05-16
    • 2011-10-25
    相关资源
    最近更新 更多