我只是看了看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 '{%'
但是當然你必須使用正確的表格和字段名稱。
我想如果你想使用2種不同的加密方式,你需要設置一些額外的參數來識別當前需要使用的女巫加密。 – Aivar
實際上,有一個活躍的joomla網站有大量的用戶,另一個基於php的網站只使用md5密碼,所以我必須找到一種方法來存儲joomla密碼和MD5加密算法。 –