Joomla のソース コードを調べたところ、Joomla には技術的には次の機能が既に備わっています。
- パスワードを保存するためのさまざまな優れた [ただし、それほど多くはない] ハッシュ アルゴリズムから選択します。
- アルゴリズムが変更された場合に備えて、アルゴリズム名をハッシュとともに保存します。
これらはどちらもコードで実際に使用されることはありません。
これが意味すること:
- インストールを実行する前に
$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 '{%'
もちろん、適切なテーブル名とフィールド名を使用する必要があります。