English 中文(简体)
PHP,旋度后登录到WordPress
原标题:
  • 时间:2009-04-08 02:19:20
  •  标签:

我工作在一个项目的客户需要一个从链接点击自动登录。

我使用握手页面这样做下面的代码:

$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。

精心制作,我握手页面(日志我)是在“博客”目录中,我WordPress应用程序“WordPress”目录中的坐落在“博客”目录。在浏览器的URL表示<代码> . .博客/ handshake.php > < /代码。然而,它的管理部分WordPress在浏览器窗口中。WordPress管理链接现在不能正常工作,因为URL在<代码> . ./博客> < /代码目录时,它需要在<代码> . .wordpress的博客/ / wp-admin > < /代码目录中。

有一种< a href = " http://en.wikipedia.org/wiki/CURL " rel = " noreferrer " > < / >旋度这样的URL在浏览器中反映出实际的页面?

我应该使用FSockOPen呢?

最佳回答

钾有这个权利——在WordPress界面是相对路径,导致管理界面以这种方式访问时不能正常工作。

你的方法是在几个方面有关,所以我想做一些快速的建议。

首先,我将努力找到一个方法来删除<代码>用户名< /代码>和<代码>美元美元密码> < /代码变量被硬编码。想想这是多么容易打破,如果密码是通过管理界面更新,例如,在代码中硬编码的值将不再是正确的,你的“自动登录”现在将失败。此外,如果有人以某种方式包括现场和收益访问<代码>握手。php代码< / >,现在他们已经有了用户名和密码为您的博客。

它看起来像你的WordPress安装在同一台服务器上休息握手你已经写脚本,考虑到路径<代码> / < /代码>博客是相对的(在示例代码)。因此,我建议试图模仿会话他们在父应用程序登录验证。我过去做过几次,只是不能回忆起细节。因此,例如,你的登录脚本不仅会设置您的登录凭证,而且设置WordPress身份验证所需的会话密钥。

这个过程将包括挖掘大量的WordPress代码,但这是开源的美丽!使用cURL和硬编码的值,而是试着简单的WordPress年代身份验证机制集成到您的应用程序登录机制。我先看<代码> wp-login的源代码。php代码> < /和从那里。

如果一切都搞砸了,你决定要不要与WordPress网您的会话的身份验证机制,然后你可以立即解决你的问题(没有修复更多的有关方面的方法)与这些变化你的代码:

首先,添加以下curl_opt:

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

然后,添加后关闭卷曲处理程序:

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();

所以,在这不到理想的解决方案您d使用旋度对用户进行身份验证,然后而不是试图劫持当前页面的管理界面,将他们重定向到常规的管理界面。

我希望这可以帮助!让我知道如果你需要更多的帮助/解决方案不明确。

问题回答

这是我的代码为:

改变的关键是我删除的参数称为“testcookie”从我的帖子字符串。

注意:添加你的网站,而不是“mywordpress”和下面代码中的用户名和密码

$curl = curl_init();

//---------------- generic cURL settings start ----------------
$header     = array(
      "Referer: https://mywordpress/wp-login.php",
"Origin: https://mywordpress",
"Content-Type: application/x-www-form-urlencoded",
"Cache-Control: no-cache",
"Pragma: no-cache",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15"
      );


curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_USERAGENT,  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15 );
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_COOKIEFILE,  cookies.txt );
curl_setopt($curl, CURLOPT_COOKIEJAR,  cookies.txt );
//---------------- generic cURL settings end ----------------



$url =  https://mywordpress/wp-login.php ;
curl_setopt($curl, CURLOPT_URL, $url);

$post =  log=username&pwd=password&wp-submit=Log+In&redirect_to=https%3A%2F% mywordpress%2Fwp-admin%2F ;
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);

$output = curl_exec($curl);

curl_close ($curl);

echo ($output)

检查HTML源代码。这听起来像是WP年代链接可能是相对的。而不是比它已经使这个过程更加复杂,不过,我建议你执行登录,用户需要什么饼干,和重定向。

否则你编码一个代理,一块一块的。

如果你的脚本并执行所有的功能你需要在一个单一的执行,您可能需要解析的cookie值,将它们存储在一个文件,然后重新发送下执行。看看CURLOPT_COOKIEFILE选项。

使用< a href = " http://framework.zend.com/manual/en/zend.http.cookies.html " rel = " nofollow noreferrer " > Zend框架年代饼干< / >类为你管理它们。我用这个过去爬安全部分的网站使用< a href = " http://en.wikipedia.org/wiki/CURL " rel = " nofollow noreferrer " > < / >旋度。





相关问题
热门标签