如何从 Joomla 外部生成 Joomla 登录令牌

Posted

技术标签:

【中文标题】如何从 Joomla 外部生成 Joomla 登录令牌【英文标题】:How to generate Joomla login token from outside Joomla 【发布时间】:2020-10-17 10:50:23 【问题描述】:

这是上下文。我有一个 Joomla 后端,在一个非常旧的 Joomla 1.X 版本中包含大量自定义代码。一切仍然令人惊讶地保持良好。网站所有者想要一个新的前端网站,他的公司选择了 WordPress。网站已建好,现在我们想从 WP 页面向 Joomla 后端添加登录表单。

以下是有效的:

    转到 Joomla 登录页面 (domain.com/administrator) 复制 html 表单(包括带有令牌的隐藏输入) 粘贴 HTML 并调整表单的 action 属性 进入 WP 页面(domain.com/wordpressFolder/page,输入凭据,它运行良好!

显然这些令牌只能使用一次。在 WP 中添加了一个短代码,它从 Joomla 获取表单并“提取”令牌并将其返回到页面。

  function st_login_form( $atts ) 
  $joomla = file_get_contents('http://www.example.com/administrator/index.php');
  $doc = new DOMDocument();
  $doc->loadHTML($joomla);
  $inputs = $doc->getElementsByTagName('input');
  $token = $inputs[5]->attributes[1]->nodeValue;

  $html = '<form action="https://www.example.com/administrator/index.php" method="post" name="login" id="form-login" style="clear: both;">
    <p id="form-login-username">
    <label for="modlgn_username">Username</label>
    <input name="username" id="modlgn_username" type="text" class="inputbox" size="15">
    </p>

    <p id="form-login-password">
    <label for="modlgn_passwd">Password</label>
    <input name="passwd" id="modlgn_passwd" type="text" class="inputbox" size="15">
    </p>
    <input type="submit" value="Connexion" />
    <input type="hidden" name="option" value="com_login">
    <input type="hidden" name="task" value="login">
    <input type="hidden" name="'.$token.'" value="1">
    </form>';

    return $html;
  

代码行为符合预期,使用注入令牌检查 WP 页面上的表单看起来不错,但是登录时它给我一个无效令牌错误。

我不太明白为什么它在复制粘贴时有效,但在我从 PHP 检索令牌时却无效。有什么线索或潜在的解决方案吗?

【问题讨论】:

请在Joomla Stack Exchange 上询问您的 Joomla 问题。 【参考方案1】:

发现我的第一个错误。 GET 通过 HTTP 完成,而 POST 通过 HTTPS 发送。显然,CSRF 令牌是域签名的。

现在它只是将我重定向到登录页面,但我没有登录。

【讨论】:

这不是问题的完整答案。我建议您编辑您的问题以包含此进度并就剩余问题寻求帮助。您是否正在尝试做 CSRF 令牌旨在防止的事情?这是 XY 问题吗?

以上是关于如何从 Joomla 外部生成 Joomla 登录令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用外部表单登录到 Joomla 1.5(不在 joomla 文件夹内,但在同一服务器上)

joomla密码加密

Joomla 外部链接 -

.htaccess Joomla -> Community Builder 中的重定向登录组件

Joomla 注册覆盖

如何在 Joomla Protostar 模板中加载外部 JS 和 URL