如何在Joomal中更改新用户的密码加密。我试图修改
getSalt($encryption = 'md5-hex', $seed = '', $plaintext = '')
和
getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
的library.joomla.user.helper,但是通过修改这两个功能,老用户无法登录!
我刚刚查看了Joomla的源代码,虽然Joomla在技术上已经具有以下功能:
- 从各种更好[但不是很多]的哈希算法中进行选择,用于密码存储。
- 将算法名称与哈希一起存储,以防算法更改。
这些东西都没有在代码中实际使用过。
这意味着:
- 在执行安装之前,您只能通过修改这两个函数定义中的
$encryption = 'md5-hex'
来更改此设置。 - 在任何其他时间更改它都会使您的所有密码失效,包括管理员密码。
证据:
$ grep -r getCryptedPassword ./*
./components/com_users/models/reset.php: $crypted = JUserHelper::getCryptedPassword($data['password1'], $salt);
./components/com_users/models/reset.php: $testcrypt = JUserHelper::getCryptedPassword($data['token'], $salt);
./installation/models/configuration.php: $crypt = JUserHelper::getCryptedPassword($options->admin_password, $salt);
./libraries/joomla/user/user.php: $crypt = JUserHelper::getCryptedPassword($array['password'], $salt);
./libraries/joomla/user/user.php: $crypt = JUserHelper::getCryptedPassword($array['password'], $salt);
./libraries/joomla/user/helper.php: public static function getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
./plugins/authentication/joomla/joomla.php: $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
您可以清楚地看到,没有一个对getCryptedPassword()
的调用指定了"加密"类型,因此始终使用函数定义中的默认值。
全新安装中,在解压缩文件和实际运行安装脚本之间,您可以将函数定义更改为:
getSalt($encryption = 'crypt-blowfish', $seed = '', $plaintext = '')
getCryptedPassword($plaintext, $salt = '', $encryption = 'crypt-blowfish', $show_encrypt = true)
这会将哈希算法更改为最佳选择 [IMO],并将哈希类型与密码一起存储,以便您以后可以更改算法而不会使所有旧密码失效。
想想看,如果您首先运行如下所示的查询以指定当前算法,您现在可以更改算法。
UPDATE TABLE users
SET password = CONCAT('{MD5}', password)
WHERE password NOT LIKE '{%'
但是,当然,您必须使用正确的表和字段名称。