0

ログイン時にユーザーが [remember me] ボックスをオンにすると、Joomla はローカル Cookie 内にパスワードを保存します。このコードは、ログインが成功したときに実行されます。

if (!in_array(false, $results, true))
        {
            // Set the remember me cookie if enabled.
            if (isset($options['remember']) && $options['remember'])
            {
                // Create the encryption key, apply extra hardening using the user agent string.
                $privateKey = self::getHash(@$_SERVER['HTTP_USER_AGENT']);

                $key = new JCryptKey('simple', $privateKey, $privateKey);
                $crypt = new JCrypt(new JCryptCipherSimple, $key);

                $rcookie = $crypt->encrypt(serialize($credentials));
                $lifetime = time() + 365 * 24 * 60 * 60;

                // Use domain and path set in config for cookie if it exists.
                $cookie_domain = $this->getCfg('cookie_domain', '');
                $cookie_path = $this->getCfg('cookie_path', '/');
                setcookie(self::getHash('JLOGIN_REMEMBER'), $rcookie, $lifetime, $cookie_path, $cookie_domain);
            }

            return true;
        }

$credentials には ['password'] キー値があり、ログイン フォームからのパスワードが含まれていることに注意してください。したがって、これが暗号化されている場合、システムがこれを逆にして、Cookie からパスワード フィールドにデータを入力するには、双方向でなければなりませんか?

私の質問は、これをどのように行うことができるかということです.実際のクリアパスワードはユーザーテーブルに保存されず、MD5 ハッシュされたものに保存されます。したがって、joomla がパスワードを保存できるのは、この Cookie からである必要があります。

4

2 に答える 2

1

Joomlaでの認証方法に関する私の理解から!動作し、次のようになります。

  • ユーザー/パスワードを入力します
  • それらは認証プラグインによってチェックされます
  • 成功すると、セッションが作成されて (通常はデータベースに) 保存され、セッション ID も Cookie として保存されます。
  • セッションの有効期限が切れていない限り、同じブラウザーで Joomla を開くと、基本的に自動的に認証されます。

だから私は本当にJoomlaを疑います!すべてのパスワードを Cookie に保存します。また、パスワードは暗号化されて保存されます。だからJoomla!元のパスワードが何であったかを知る方法はありません。

于 2013-01-24T21:55:19.600 に答える
0

いいえ、双方向であってはなりません: 単純にユーザー + パスの組み合わせを格納しているだけです ($credentials は、キー「ユーザー名」と「パスワード」を持つ配列です)。Joomla はまったく同じ値をデータベースに保存し、「保存された値 (暗号化された値) が Cookie (暗号化された値) と同じであることを確認するだけです。

同じシーケンスが適用される場合、2 つの値は一致します (ご覧のとおり、Web サイトの秘密鍵のハッシュもあります)。

于 2013-01-24T21:59:06.800 に答える