当前位置: 首页 > 面试题库 >

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

寿翰飞
2023-03-14
问题内容

我目前有一个Joomla
1.5安装,以及另一个网站。它们都位于同一台Web服务器上。但是,它们位于wwwroot目录中的不同文件夹中。我想在非joomla网站上放置一个登录表单,该表单将使用户登录到Joomla。我已经尝试过将Joomla登录表单代码复制并粘贴到非joomla网站上的页面中,并且一切正常,直到机密表单值不正确为止。任何帮助是极大的赞赏。

编辑:这是代码-

联系表:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="login" name="login" method="post" action="login.php">
  <label>
  <input name="username" type="text" id="username" value="username" />
  </label>
    <label>
    <input name="password" type="password" id="password" value="password" />
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="submit" id="submit" value="Submit" />
    </label>
  </p>
</form>
</body>
</html>

登录脚本:

<?php
$uname = $_POST['username'];
$upswd = $_POST['password'];
$url = "http://www.mywebsite.com/joomla_site/index.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, './cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, './cookie.txt');
curl_setopt($ch, CURLOPT_HEADER, FALSE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)) {
    preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
}

// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['passwd'] = urlencode($upswd);
$postfields['lang'] = '';
$postfields['option'] = 'com_login';
$postfields['task'] = 'login';
$postfields[$spoof[1]] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);
?>

问题答案:

好的,为了使它在这里起作用,需要做的是-

  1. 创建一个新会话并获取关联的令牌
  2. 传递用户名,密码和令牌以创建登录会话
  3. 获取登录会话的新cookie值
  4. 将Cookie传输到浏览器

这是完成所有这些所需的代码:

<?php
$uname = $_POST['username'];
$upswd = $_POST['password'];
$url = "http://joomla website.com";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_HEADER, TRUE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)) {
    preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
}

// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['passwd'] = urlencode($upswd);
$postfields['option'] = 'com_user';
$postfields['task'] = 'login';
$postfields[$spoof[1]] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);

// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
$cookie=explode('=',$m[1]);
setcookie($cookie[0], $cookie[1]);
?>

只要脚本中使用的URL在页面上具有登录表单,该方法就可以在任何Joomla网站上使用。一旦运行了该脚本,您就应该能够访问该网站并登录。



 类似资料:
  • 我知道如果我们想在外部服务器上部署Spring boot Web应用程序,我们应该排除嵌入式服务器,但如果我们不这样做会发生什么?假设我在jboss外部服务器上部署Spring boot war,但我没有排除tomcat服务器?在这种情况下,Spring boot使用jboss外部服务器,还是仍然使用嵌入式tomcat服务器?

  • 问题内容: 我正在为Joomla编写模块,这时我真的需要能够使用Jfactory连接到数据库。通常一个人可以简单地使用,但是PHP错误告诉我不包含JFactory类。 所以现在我需要知道如何包括这个JFactory类 。我尝试了一些在互联网上发现的建议,但都没有成功。这是代码(独立运行时完​​美) 希望您能解决我的问题。您的帮助将不胜感激。 尝试1 但这也不起作用。 尝试2(成功) 现在一切正常。

  • 在origin旧系统中,有一个JSP文件,它在WEB-INF/views中动态生成,在spring mvc中具有以下配置。xml。 但是现在,我通过Spring Boot加载和嵌入式tomcat启动(jar-jar*.war)改变了原来的系统。下载的AppPage将不再被访问。 那么,是否可以对应用程序进行配置或编码,以在Spring Boot上下文路径之外为外部JSP文件提供服务呢? 谢谢,詹姆

  • 在我的ColdFusion应用程序中,我使用了Java库jsch。SFTP服务器是BitVise个人版(用于测试)。当前,我正在强制使用,为此,我使用下面的方法从文件名创建一个主机密钥存储库。 有没有办法设置服务器的指纹(像)而不是使用JSch库中的公钥? publickey引用示例,以备需要: 本地主机ssh-rsa AAAAB3NZAC1YC2EAAAADAQABAAABGQQCKTHVR7Q

  • 我需要在SI中构建一个应用程序,它读取一个输入目录,该目录可能包含1000个文件,并将它们复制到远程服务器,例如10个服务器,处理器实例将在其中接收它们进行处理。文件的移动应该是循环方式,以便在处理它们时不会给任何服务器带来额外的负担。再详细一点——假设我们在输入目录中有10个文件,那么应用程序应该在服务器1上复制文件1,在服务器2上复制文件2......服务器10上的文件10。 顺序并不重要,重

  • 这里是我的代码,在那里我已经尝试了几个小时,将上传的图像保存在不同大小的服务器文件夹中。但是,图像没有被保存,并且无法得到它出错的地方。以前,我使用二进制代码编写,如下面的第二个代码部分所示,通过从移动端以某种方式带来二进制数据(图片是从相机中获取的,并从移动端即时发送)。但随着数据的增加。我决定使用甚至上传图像文件与多部分类型的文件上传从我的移动端。 但下面的工作与我以前获取二进制数据时的相同函