导入以MD5+许多元数据形式提供密码的用户

时间:2010-12-30 作者:benstraw

我有一个电子表格,提供给我的用户导入到我建立的新网站。我得到了MD5哈希形式的密码。我怀疑如果我将其插入数据库中的密码字段,因为它是MD5,所以当用户尝试登录新系统时,它仍将与他们的密码匹配。这是正确的假设吗?

我还为每个需要插入的用户提供了大量元数据。

因为我想插入md5字符串,而不是密码文本和额外的自定义元字段,所以我认为我不能使用wp\\u insert\\u user。

有人有过这方面的经验吗?我想我会直接在mysql中做一些事情,而不是破解一个WP插件,不过任何建议都将不胜感激。

5 个回复
最合适的回答,由SO网友:Rarst 整理而成

WordPress过去使用MD5作为密码哈希,但后来又转向了更安全的phpass。好的方面是它保留了向后兼容性-如果用户有旧的MD5哈希,那么它将被检查为旧的MD5哈希,并使用当前算法自动重新哈希和重新保存,请参阅wp_check_password().

您是正确的,不能使用wp_insert_user() 因为它需要纯文本密码。

SO网友:hakre

I suspect if I insert this into the password field in the database, since it is MD5 it will still match their password when the user tries to login on the new system. Is this a correct assumption?

首先检查wordpress版本的源代码以验证这一点。这可能不是默认行为。因此,请检查源代码并对您的安装进行快速破解(将其置于GIT , 因此,您可以在编辑core时撤消(它很快,您可以从git init). 这不会杀死一只小猫,但会提升您的工作流程(顺便说一句)。

因此,在修复登录问题后(解决方案:添加对MD5哈希的检查,如果匹配,则使用phpass) 您可以考虑元数据问题。

我的回答没有涵盖太多。我的意思是,只要以某种方式添加数据,它应该是微不足道的。只需添加它。如果数据与您的站点不兼容,您可能需要首先扩展您的站点,因此无论交易是什么,我相信您都能管理好它。

Tip: 直接插入数据库。只需执行一个MySQL查询即可。不要在wordpress PHP代码中过多地摇摆。Wordpress只知道MySQL数据库存储数据。因此,如果控制数据,则控制wordpress;)。

SO网友:Umopepisdn

我也有这个问题。我最终解决了这个问题,将MD5密码作为纯文本导入,然后更改Wordpress身份验证,在检查密码之前将其通过MD5哈希。

我的具体做法是:

我使用插件从CSV中导入用户,CSV中包含用户的MD5 ed密码。这让我的数据库中充满了无法登录的用户,因为他们的明文密码现在是“5f4dcc3b5aa765d61d8327deb882cf99”,而不是“密码”。

接下来,我编写了一个插件,其中包括对wp\\u hash\\u password()和wp\\u check\\u password()的微小更改,以使MD5哈希成为所有密码检查的第一步。因此,当他们输入“password”时,WordPress会检查“5f4dcc3b5aa765d61d8327deb882cf99”,因此身份验证检查成功。我仍然得到相同的phpass加密,唯一的区别是我从不给它原始的明文来加密。

这是通过从pluggable复制和粘贴这些功能来实现的。将php转换为新插件,并对其进行修改,以将提供的明文密码封装在md5()中。

每个函数与原来的实现相比只有一个变化;函数wp\\u hash\\u password()中的此行:

return $wp_hasher->HashPassword( trim( $password ) );
收件人:

return $wp_hasher->HashPassword(  md5 ( trim( $password ) ) );
函数wp\\u check\\u password()中的这一行:

$check = $wp_hasher->CheckPassword($password, $hash);
收件人:

$check = $wp_hasher->CheckPassword(md5($password), $hash);
通过这种方法,用户可以透明地保存他们的密码,而不是牺牲安全性,我们可以使用一种更加安全的现成身份验证方案。

SO网友:Deepak Rajpal

正如Rarst所说,如果您为每个用户直接将MD5哈希插入数据库,existing md5 password will work.

如果有人正在寻找db query来更新所有用户的密码,请在插入用户后使用以下代码。

global $wpdb;

$user_id = wp_insert_user($user_data);

$result = $wpdb->update( 
    $wpdb->users,
    array( \'user_pass\' => $user_pass ),
    array( \'ID\' => $user_id )
);

SO网友:Coco

@首先,您是对的,您不能使用原始形式的wp\\u insert\\u user()插入已经散列的密码,但通过更改此行:

$user_pass = wp_hash_password( $userdata[\'user_pass\'] );

致:

$user_pass = $userdata[\'user_pass\'];您将能够插入md5哈希密码。

由modyfing提供wp_insert_user() 可以使用wp_create_user( $username, $password, $email ); 插入新用户。Remember to undo your changes in wp_insert_user() when you\'re done!

结束

相关推荐

为什么WordPress从MySQL获得的帖子来自虚拟主机名,而不是直接主机名?

我正在Mac上开发一个WordPress网站,运行OS X 10.6.4。在开发过程中,我使用OS X的内置Apache服务器在本地运行该站点。我已经安装了WordPress,并将其连接到OS X的MySQL,没有问题。该网站似乎运行良好,我可以发布、编辑等。WordPress安装在一个名为~/Sites/mysite.dev.我还定制了.hosts 文件和Apachehttpd-vhosts.conf 文件,以重定向对mysite的请求。请转到这个文件夹。所以当我进去的时候http://mysite.d