it-swarm.com.de

Remote Login mit cURL

Ich versuche, einen Benutzer anzumelden, der an einer anderen Stelle bei einer Joomla-Site authentifiziert wurde und Brent Friar's Nice-Programm verfolgte, aber zwei Änderungen vornehmen musste:

  1. ein Feld "return" hinzugefügt, das im Formular enthalten war
  2. refencing com_users, nicht com_user

Ich weiß nicht, ob diese Site bestimmte Anpassungen hat, ein bestimmtes Login-Modul verwendet oder ob es sich um eine andere Version handelt. Ich habe keinen Administratorzugriff auf die Site, kann also nicht überprüfen. Jetzt wird mein Skript ausgeführt, aber der Benutzer wird nicht erfolgreich angemeldet - es wird kein Cookie zurückgegeben, das erwartet wird.

Stattdessen kehrt die Site zurück

HTTP/1.1 100 Weiter

HTTP/1.1 303 Anderes Datum: Mi, 23. Juli 2014 18:18:25 GMT Server: Apache/2.2.22 X-Powered-By: PHP/5.2.17 Ort: http: //www.strassenbau .forum-kundenportal.de/login-erfolgreich Content-Länge: 0 Verbindung: close Content-Typ: text/html; Zeichensatz = utf-8

Ich kenne ein bisschen Joomla, weiß aber nichts über die Tiefe der HTTP-Kommunikation, daher habe ich keine Ahnung, wo das Problem liegt.

Hier ist mein Code:

<?php

$uname = "*** secret";
$upswd = "*** credentials";
$url = "http://www.strassenbau.forum-kundenportal.de/login-anmeldung";
set_time_limit(0);

$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);
}

preg_match('/name="return" value="(.*)"/', $ret, $return); // search for hidden field "return" and get its value

// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['password'] = urlencode($upswd);
$postfields['option'] = 'com_users';
$postfields['task'] = 'user.login';
$postfields['return'] = $return[1];
$postfields[$spoof[1]] = '1';
// edit: using the location of the 303-result directly...but it does not make a difference
curl_setopt($ch, CURLOPT_URL , "http://www.strassenbau.forum-kundenportal.de/login-erfolgreich");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);

echo "ret2: <pre>"; var_dump($ret); echo "</pre>";  // no cooking being set here!

// 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]);


?>

Während ich nach Antworten suchte, fand ich eine Bemerkung, dass Joomla jetzt auch Session-Token verwendet, weshalb es aus diesem Grund nicht funktionieren würde. Kann jemand diese Erklärung bestätigen? Aber wie wird dann in solchen Situationen die Fernanmeldung gehandhabt? Könnte ich das Problem lösen, indem ich mein eigenes Login-Modul implementiere?

3
MBaas

Endlich habe ich mein Problem mit der AutoLogin-Erweiterung (toter Hyperlink zu JED entfernt) gelöst.

pdate: das hat in den alten Tagen gut funktioniert (Joomla 2), aber die Erweiterung scheint zurückgezogen zu sein, also entschuldige ich mich, wenn die Lösung dir heutzutage nicht hilft.

0
MBaas

Um Ihr Authentifizierungsproblem zu lösen, können Sie einfach die IP-Anmeldung installieren und Ihre IP aktivieren: http://extensions.joomla.org/search) q = ip +

PD: Ihr preg_match ("/ name = ... könnte ein anderes Element finden, und nicht nur das" return "-Token.

0
Anibal

Haben Sie versucht, hinzuzufügen

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
0
jdog