【发布时间】:2013-02-27 06:30:08
【问题描述】:
所以我希望能够在 user_pass 列中更改我的 wordpress wp_user 表中存在的密码哈希。我希望能够写出如下内容:
# simplified version of what is desired.
UPDATE `wp_user` SET user_pass = MD5('123') WHERE user_email = 'some_dudes@someplace.com';
基本上,我希望能够在 mysql 中设置用户密码,这样当我使用查询设置密码后,当用户通过登录表单输入密码时,wordpress 将继续接受该密码为有效密码。我正在查看有关此的 PHPass 信息以及 wordpress 源代码中 class-phpass.php 的内容。根据我的研究,这似乎非常复杂,如果不是不可行的话。我是否遗漏了某些东西,或者这实际上是为了难以处理或可能被混淆?是否可以在 MySQL 中复制此功能?任何帮助,将不胜感激。非常感谢。
关于进度的编辑: 如果您只需要开发级别的安全性,那么您实际上可以使用以下内容:
UPDATE `wp_user` SET user_pass = MD5('123') WHERE id = 1342;
我应该更好地解释为什么会这样。出于遗留兼容性原因,Wordpress 将默认使用 MD5 哈希。基本上,当将密码传递给 wordpress 时,它会运行 wordpress PHPass 哈希,这将因MD5('123') 之类的原因而失败,然后 wordpress 将尝试其他更简单的哈希算法,例如 SHA1,最后是 MD5。然后,如果在其中一个上找到匹配项,wordpress 实际上会更新相关记录的密码列。它将给定的密码更新为 PHPass。发生这种情况后,您仍然可以继续前进。这基本上适用于开发环境,但是与 PHPass 的工作相匹配的 MySQL 查询是一项史诗般的任务。如果我破解它,那将是我的下一个更新。显然,wordpress 正在运行添加盐的河豚哈希大约 8000 次以生成最终的哈希结果。
【问题讨论】:
-
好吧,Galt 先生,您似乎正在尝试开发一个 MySQL 查询,该查询将以编程方式将 WordPress 用户的密码更改为某个新值。那是对的吗?你说得对,这很难。但它肯定不会被混淆。它不像更新 wp_user 表中的列那么简单。更改密码时是否要取消用户激活的任何会话?
-
如您所见,
class-phpass.php中发生了很多事情。其中大部分与可移植地做两件事有关:为哈希盐生成一个加密健壮的随机数,以及生成一个哈希。如果您尝试使用 RAND() 和 MD5() 等 MySQL 函数来复制它,那么您很可能会在您的 WordPress 安装中创建一个安全漏洞。那是因为 MySQL RAND 函数在密码学上不是健壮的。也就是说,MySQL 随机数比它们应该的更容易猜测。使用php函数,否则被破解! -
@OllieJones 目前我并不太担心用户会话,此查询的预期功能是替换用户注册时创建的自动生成密码。这是为了在开发机器上进行测试。最终目标是允许创建任意用户的查询。不过密码很重要,我还不知道如何复制。
-
@OllieJones 别担心,我知道最好不要使用我希望构建的内容作为我的实时安装的一部分 :)
标签: mysql wordpress passwords sql-update phpass