我可以在joomla cookie中加密密码吗?

时间:2013-01-24 18:26:13

标签: cookies joomla

如果用户在登录时选中“记住我”框,则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;
        }

注意$凭证有一个['password']键值,它确实包含登录表单中的密码。 因此,如果这是加密的,那么系统必须有两种方法来反转它并从cookie中填充密码字段?

我的问题是如何才能这样做...真正的清除密码不保存在用户表中,而是MD5哈希值。所以必须从这个cookie中joomla能够保存密码。

2 个答案:

答案 0 :(得分:1)

从我对如何在Joomla中进行身份验证的理解!工作,它是这样的:

  • 您填写用户/密码
  • 他们通过身份验证插件进行检查
  • 如果成功,会话被创建并存储(通常在数据库中),会话ID也将存储为cookie
  • 只要会话未过期,并且您使用相同的浏览器打开Joomla,您基本上就会自动进行身份验证。

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

答案 1 :(得分:0)

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

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