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

PHP,cURL发布以登录WordPress

法烨烨
2023-03-14
问题内容

我正在为一个需要从链接单击自动登录的客户端项目。

我正在使用握手页面通过以下代码执行此操作:

$username = "admin";
$password = "blog";
$url = "http://wordpressblogURL/";
$cookie = "cookie.txt";

$postdata = "log=" . $username . "&pwd=" . $password . "&wp-submit=Log%20In&redirect_to=" . $url . "blog/wordpress/wp-admin/&testcookie=1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url . "blog/wordpress/wp-login.php");

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url . "blog/wordpress/wp-login.php");

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
echo $result;

exit;

这很好。这让我非常高兴。

问题是我相信WordPress可以将URL锁定。

详细地说,我的握手页面(登录到我的页面)在“ blog”目录中,而我的WordPress应用程序在“ wordpress”目录中,该目录位于“
blog”目录中。浏览器中的URL说..blog/handshake.php。但是,它在浏览器窗口中具有WordPress的Admin部分。WordPress
Admin链接现在无法正常运行,因为该URL需要在../blog目录中时,它在..blog/wordpress/wp-admin目录中。

cURL中是否有办法做到这一点,以便浏览器中的URL能够反映实际的页面?

我应该改用FSockOPen吗?


问题答案:

Kalium正确无误-WordPress界面中的路径是相对的,导致以这种方式访问​​时管理界面无法正常工作。

您的方法在某些方面令人担忧,因此,我想提出一些快速建议。

首先,我将尝试寻找一种方法来从硬编码中删除$username$password变量。考虑一下这种破解有多么容易-
例如,如果密码是通过管理界面更新的,则代码中的硬编码值将不再正确,并且“自动登录”现在将失败。此外,如果有人以某种方式组成了该网站并获得了访问权handshake.php-好,现在他们已经拥有了您博客的用户名和密码。

鉴于路径/blog是相对的(在示例代码中),您的WordPress安装似乎与您编写的握手脚本位于同一服务器上。因此,我建议尝试模仿您在父应用程序登录中验证的会话。我过去已经做过几次-
只是不记得具体细节。因此,例如,您的登录脚本不仅会设置您的登录凭据,还会设置WordPress身份验证所需的会话密钥。

这个过程将涉及挖掘许多WordPress的代码,但这就是开源的美!不要使用cURL和硬编码值,而应尝试将WordPress的身份验证机制简单地集成到应用程序的登录机制中。我将从寻找来源wp- login.php并从那里开始。

如果所有其他方法都失败了,并且您确定不尝试将会话身份验证机制与WordPress进行网格划分,那么可以通过对代码的以下更改立即解决您的问题(而无需解决与方法有关的更多方面):

首先,添加以下curl_opt:

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);  // Enables session support

然后,在关闭cURL处理程序之后添加以下代码:

curl_close($ch);
// Instead of echoing the result, redirect to the administration interface, now that the valid, authenticated session has been established
header('location: blog/wordpress/wp-admin/');
die();

因此,在这种不太理想的解决方案中,您将使用cURL对用户进行身份验证,然后与其尝试将管理界面劫持到该当前页面中,而不是将其重定向到常规管理界面。

我希望这有帮助!让我知道您是否需要更多帮助/解决方案尚不清楚。



 类似资料:
  • 我带着很大的希望来到这里解决我的问题。我有这个网站,我想登录并访问一个会员专页。所以基本上php代码使用cURL登录,然后打开一个只有成员的页面。下面是我使用的代码。但每次我尝试访问会员专页时,它都会要求我登录。因此它不会保存在我已经登录的会话或cookie中。 我得到的结果是: 登录HTTP/1.1 200 OK Server:nginx日期:2014年6月12日星期四14:21:01 GMT内

  • 问题内容: 我是使用cURL的新手,它很难为其找到好的资源。我想做的是通过curl来登录到远程站点,然后执行登录表单,然后将其发送回去。 我拥有的代码似乎无效,仅尝试显示网站的主页。 我究竟做错了什么。在此工作之后,我想重定向到另一个页面并从我的网站获取内容。 问题答案: 我已经放弃了好一阵子,但后来又重新讨论了。由于这个问题是定期查看。最终,这就是我最终使用的对我有用的东西。 更新:此代码绝不打

  • 我无法登录到已发布的apk,但调试apk工作正常。谷歌服务。发布的apk缺少json文件,我不知道为什么会这样。请有人帮我解决这个问题。下面我列出了我的应用程序级依赖项。 项目级依赖项 我得到这个错误请任何人帮帮我。

  • 问题内容: 我无法通过CURL将表单数据发布到位于不同主机上的接收PHP脚本。 我得到一个错误 这是我要发布的数组: 这是发生错误的行: 第三个参数 必须 是一个数组,因为在通过同一数组发送文件时,我需要将标头设置为该数组,因此无法将数组转换为查询字符串或使用。 另外,我无法访问接收主机上的代码,因此无法序列化和反序列化数组。 我假设 名称 键的值是数组是导致此错误的原因,我还假设它不支持多维数组

  • 问题内容: 我可能还差得远,但是我整个下午一直在尝试在本教程PHP框架教程中运行curlpost命令。我不明白的是PHP应该如何解释我的POST,它总是以空数组的形式出现。 (其中的斜线只是让我看起来不像是个白痴,而是我使用PHP 5.2在Windows上执行此操作,也曾在与Linux curl相同版本的Linux服务器上尝试过) 我必须缺少一些东西,因为它看起来很简单,帖子解释得不好,如果可以的

  • 问题内容: 我正在存储Facebook用户ID和访问令牌。我可以将此信息发布到所选用户的留言墙上吗?在这里可以找到以下代码:http : //developers.facebook.com/docs/reference/api/post/ 我只是不确定如何用php运行它。 问题答案: