如果用户在登录时选中“记住我”框,则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能够保存密码。
答案 0 :(得分:1)
从我对如何在Joomla中进行身份验证的理解!工作,它是这样的:
所以我真的怀疑Joomla!将任何密码存储在cookie中。密码也以加密方式存储。 Joomla!无法知道原始密码是什么。
答案 1 :(得分:0)
不可以不是两种方式:你只是存储用户+传递的组合($ credentials是一个带有'用户名'和'密码'的数组的数组),我假设Joomla将相同的值保存到数据库中,并“记住我”只是检查存储的值(加密的)是否与cookie相同(也是加密的)。
如果应用了相同的序列,则两个值将匹配(如您所见,还有一个带有网站私钥的哈希值)。