更改 Joomla 用户注册的加密,而不破坏现有用户的登录

问题描述 投票:0回答:1

如何更改 Joomla 新用户的密码加密? 我尝试修改:

getSalt($encryption = 'md5-hex', $seed = '', $plaintext = '')

getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)

library.joomla.user.helper,但是通过修改这两个函数,老用户就无法登录了!

php md5 joomla2.5 user-registration
1个回答
1
投票

我刚刚查看了 Joomla 的源代码,虽然 Joomla 技术上已经具备以下功能:

  1. 从各种更好的[但不是很多]的密码存储哈希算法中进行选择。
  2. 将算法名称与哈希一起存储,以防算法发生更改。

这些东西都没有在代码中实际使用过。

这意味着什么:

  1. 您只能在安装之前通过修改这两个函数定义中的$encryption = 'md5-hex'
    来更改此设置。
  2. 在任何其他时间更改它都会使您的所有密码失效,包括管理员密码。
证据:

$ 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 '{%'

但是当然您必须使用正确的表和字段名称。

© www.soinside.com 2019 - 2024. All rights reserved.