Bir Joomla web sitesine komut dosyası tarafından CURL giriş

5 Cevap php

Ben işlenmesi gereken özel bir sayfaya erişmek için, bir Joomla web sitesi için CURL kullanan bir PHP komut dosyası tarafından giriş gerekir, ama ben yaptım nothwithstanding çeşitli girişimleri, ben her zaman bir 403 hata var. Ben diğer web siteleri ile benzer bir şey yaptım ve işe yaradı.

Senaryo I kullanın:

$uname = "id";
$upswd = "pswd";
$url = "http://www.somewebpage.com";
$agent = "'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6'";

$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_USERAGENT, $agent );
curl_setopt($ch, CURLOPT_HEADER, TRUE );
curl_setopt($ch, CURLOPT_REFERER, $url1);

// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['passwd'] = urlencode($upswd);
$postfields['remember'] = 'yes';
$postfields['option'] = 'login';
$postfields['op2'] = 'login';
$postfields['return'] = urlencode($url);
$postfields['message'] = '0';
$postfields['force_session'] = '1';
$postfields['j3b00d36f4336137f4f03335c5eee6440'] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);

$ret = curl_exec($ch);

Kullanıcı adı ve şifre gibi ben kullanıyorum web sitesi URL mükemmel çalışıyor.

Bu benim olsun sonuç:

HTTP/1.1 100 Continue

HTTP/1.1 403 Forbidden
Date: Sat, 06 Feb 2010 08:29:36 GMT
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.7a DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.10
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

Benim CURL isteği yanlış bir şey mi var? Veya Joomla uzaktan oturum ile bir sınır var mı?

Önerileriniz için teşekkürler!

5 Cevap

İşte Paul Sweeney cevap basitleştirilmiş bir PHP bir çeviri. Bu Joomla 1.5 çalışır :)

$uname = "id";
$upswd = "pswd";
$url = "http://www.somewebpage.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_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);

Burada birkaç sonda var ..

firstly you are using the wrong fields. option="com_user" not "login" task="login" (am asuming you are talking about joomla 1.5, not joomla 1.0 , they are different)

ancak en büyük sorun joomla her formda eşsiz bir etiket koyar, ve bu değer sadece bir kez kullanılabilir olmasıdır. böylece bir oturum açma formu sadece bir kez, çalıntı ve yapmaya çalıştığınız gibi tekrarlanmış cant teslim anlamına gelir. (Kötü bir işlem için değil bile)

böylece, joomla giriş sayfasını istemek zorunda form değerleri kazımak, sonra verileri yeniden olacaktır.

alternatif olarak ne istediğini yapan bir eklenti oluşturabilirsiniz.

Yitwail en php kodu kullanarak, ben, kullanıcı adı / pass demo / demo ile http://demo.joomla.org/1.5/ çalıştı mydomain.com / yitwails_php_script.php oluşturulur ve koştu. Şimdi joomla demo gitmek için, ve zaten yapman mümkün olması gerekmez mi? Bu şekilde çalışmak için görünmüyor - Ben süreçte bir şey eksik?

CURL istek kendi üzerine ince görünüyor. Daha çok sizin istek içinde daha sunucu tarafında bir sorun olabilir -. Berbat bir htaccess dosyası, ya da orada dosyalar için geçersiz izinler, orada olabilir bu "otomatik" oturum açma girişimi sırasında sadece aşikar olan.

Biliyor musun, ben bizim Joomla yüklemek bazı testler yapmak için bu hafta gerçekten benzer bir şey yazdı. Hile sitesine iki isteklerini yapmak için: özgün bir giriş belirteci almak için bir, ve bir kullanıcı oturum oluşturmak ve başka aslında oturum açmak için

Her iki istekleri karşısında çerez paylaşmak lazım, ve her yeni istek kullanıcı oturumu yeni bir belirteç oluşturmak olacak, ben inanıyorum.

İşte bash benim komut wget kullanarak, bulunuyor:

function login {
    Server=$1
    User=$2
    Pass=$3
    Token=`wget \
        --quiet \
        --load-cookies ~/cookies.${User}.txt \
        --save-cookies ~/cookies.${User}.txt \
        --keep-session-cookies \
        --output-document=- \
        "http://${Server}/administrator" | \
    grep -Po '"[a-zA-z0-9]{32}"' | \
    grep -o "[^'\"]*"`

    wget \
        --quiet \
        --load-cookies ~/cookies.${User}.txt \
        --save-cookies ~/cookies.${User}.txt \
        --keep-session-cookies \
        --output-document=/dev/null \
        --post-data="username=${User}&passwd=${Pass}&option=com_login&task=login&${Token}=1" \
        "http://${Server}/administrator/index.php?option=com_login"
}

Kullanımı:

$ login www.google.com "username" "password"

Muhtemelen PHP curl bu tercüme, ya da sadece güvenlik konusunda çok endişe değil bir * nix sistem üzerinde iseniz düz bir exec () çağrısı kullanın ve olabilir. (Sizin SysAdmin veya CM almak için iyi bir yol kadar çalıştı, üretim içine () exec gerektirir kod koyarak).