【问题标题】:How to use PHP PDO Cross-platform for UserName/Password Management如何使用 PHP PDO 跨平台进行用户名/密码管理
【发布时间】:2019-12-03 18:43:42
【问题描述】:

我正在开发一个项目,该项目可能在使用 mySQL 或 MS SQL 作为数据库的服务器上运行。因此我使用 PHP PDO 连接我的数据库。我不想以纯文本形式存储密码,如何最有效地处理密码存储和验证。

我曾尝试使用 Google 进行 PDO 登录,所有文章都是特定于 mySQL 的,包括使用 mySQL 函数。到目前为止,我一直无法找到有关跨数据库支持的任何信息。


   $qry = $db_conn->query("Select UserADID, EMPLID, UserActive, UserRole from tbl_Users Where UserADID= :USR_NAME and UserPass= :USR_PASS Limit 1");


如果用户的帐户经过验证,我希望能够从数据库中提取用户的凭据(角色和状态)。

【问题讨论】:

  • 如果连接都是用PHP完成的,那么使用password_hashpassword_verify
  • 好的,很高兴知道。从我正在阅读的内容来看,似乎 password_hash 和 password_verify 是特定于 mySQL 的。不知道它们是通用的。
  • @aynber 一个关于这个主题的最佳实践问题。最好将密码散列并作为查询的一部分发送以检查它还是将散列后的密码从数据库中提取出来然后进行验证?
  • 它们是 PHP 命令而不是 MySQL。基本上,所有的哈希都将在插入数据库之前完成。
  • 我认为使用password_verify()函数,最好将哈希从数据库中提取出来,然后进行验证。

标签: php mysql sql-server pdo passwords


【解决方案1】:

我使用了@aynber 的 password_hash 和 password_verify 建议。

如果连接全部使用 PHP 完成,则使用 password_hash 和 password_verify – aynber Jul 25

【讨论】: