【问题标题】:Can I un encrypt the password in joomla cookie我可以取消加密 joomla cookie 中的密码吗
【发布时间】:2013-01-24 18:26:13
【问题描述】:

如果用户在您登录时选中“记住我”框,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才能保存密码的。

【问题讨论】:

    标签: cookies joomla


    【解决方案1】:

    根据我对Joomla 中的身份验证方式的理解!工作,它是这样的:

    • 你填写用户/密码
    • 身份验证插件会检查它们
    • 如果成功,则创建并存储会话(通常在数据库中),并且会话 ID 将存储为 cookie
    • 只要会话没有过期,用同一个浏览器打开Joomla,基本上就自动认证了。

    所以我真的怀疑 Joomla!将所有密码存储在 cookie 中。 密码也以加密方式存储。所以Joomla!无法知道原始密码是什么。

    【讨论】:

    • 使用 php 在服务器上检查密码(正如你所说的插件或但是),但它都是 php。会话是在不保存密码的数据库上创建的,但如果您选择记住密码,则密码将作为 2 路加密存储在 cookie 中。这是您唯一一次获得自动身份验证。
    【解决方案2】:

    不,它不能是两种方式:您只是存储用户 + 密码的组合($credentials 是一个带有键“用户名”和“密码”的数组),我假设 Joomla 将相同的值保存到数据库中,而“记住我”只是检查存储的值(加密)是否与 cookie 相同(也加密)。

    如果应用相同的序列,这两个值将匹配(如您所见,还有一个带有网站私钥的散列)。

    【讨论】:

    • 我发现 joomla 确实将密码值作为加密(2 方式)保存在 cookie 中,如果您选择记住我 - 然后它会尝试让您保持登录状态,或者更确切地说是自动登录。这是对于您拥有自己的笔记本电脑等的场景,我们希望人们不要在咖啡机上使用它。 Joomla 确实只在数据库中存储散列密码。我找不到会话中存储密码的任何证据。至于凭据数组,是的,这是他们可以在登录后设置为 null 的东西,因为它在不再需要后存在于内存中。
    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 2023-03-04
    • 2019-10-17
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多