2013-12-21 2 views
0

Joomla 패널에서 자동으로 관리자로 로그인하는 스크립트를 만들려고합니다. 나는 Joomla의 응답이 보안 토큰이 잘못되었다는 것을 제외하고 게시 질의와 그 잘 동작을위한 스누피를 사용하고있다. 나는 토큰을 얻기 위해 JSession::getFormToken()을 사용하는데, 토큰을 출력 할 때 토큰을 출력한다. (아마도 올바른 것이 아닌가?).joomla admin php post script를 통한 로그인 잘못된 토큰

왜 내가 필요합니까? 방금 ​​내 사이트에 관리자 권한을 부여하고 (스크립트가 암호로 보호됩니다) 자동으로 기사를 작성하지만 관리자 로그인에 필요한 Joomla의 보안 토큰 (현재 버전 3.0 사용)이 문제가됩니다. 기사를 게시 할 때도 마찬가지입니다. 내 아이디어를 실현하는 더 쉬운 방법이 있을까요? 여기

내가 사용하는 스크립트 (BTW 스크립트는 기사에 난 기사에서 PHP 바인딩 directPHP을 사용하고 있습니다) :

<?php include "Snoopy.class.php"; 
$snoopy = new Snoopy; 
$x=JSession::getFormToken(); 
$submit_url = "http://domain.com/administrator/index.php"; 
$submit_vars["username"] = "admin"; 
$submit_vars["passwd"] = "mypassword"; 
$submit_vars["option"] = "com_login"; 
$submit_vars["task"] = "login"; 
$submit_vars["return"] = "aW3kDXgucMhw"; 
$submit_vars[$x] = "1"; 
if($snoopy->submit($submit_url,$submit_vars)) 
{ 
    while(list($key,$val) = each($snoopy->headers)) 
     echo $key.": ".$val."<br>\n"; 
    echo "<p>\n"; 

    echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n"; 
} 
else 
    echo "error fetching document: ".$snoopy->error."\n"; ?> 

출력은 다음과 같다을 :

0: HTTP/1.1 200 OK 
1: Date: Sat, 21 Dec 2013 15:02:53 GMT 
2: Server: Apache 
3: X-Powered-By: PHP/5.3.28 
4: Connection: close 
5: Content-Type: text/html 

Die Anfrage는 (는) Sicherheitstoken ungültig ist의 상표입니다. 형제와 형제가 함께 행동하십시오. (잘못된 보안 토큰으로 인해 쿼리가 거부되었음을 의미)

"올바른"보안 토큰을 얻거나 내 아이디어를 실현하는 더 쉬운 방법은 무엇입니까? 미리 감사드립니다.

+0

나는이 방법을 사용해도 성공하지 못했습니다. http://stackoverflow.com/questions/19564730/joomla-login-automatically-performed-by-external-php-script-which-is-called-thro?rq=1 – user3125470

답변

1

비슷한 문제가있었습니다.

jQuery를 사용하여 프런트 엔드에서 사용자를 로그인하고 (물론 이미 인증 된 후) 동일한 응답을 받았습니다. $document->addScriptDeclaration()을 사용하여 세션 토큰을 JavaScript 변수로 가져 왔습니다.

프런트 엔드에서 JSession::getFormToken()으로 전화하면이 문제가 발생한다고 생각합니다.

나는 작은 플러그인을 작성하여이를 테스트 onAfterInitialize는 다음과 같이했다 :

function onAfterInitialise() 
{ 
    $request = JFactory::getApplication()->input->get->get('ajaxGet', '', 'string'); 
    $admin = JFactory::getApplication()->isAdmin(); 


    if( $request == "token" and $admin){ 
     echo json_encode(array("token" => JSession::getFormToken())); 
     exit(); 
    } 
} 

내가 생산의 모든 종류에 대해이 작업을하지 않는 것이 좋습니다 양해 바랍니다. 이것은 단순히 테스트 용이었습니다.

jQuery 스크립트를 사용하여 처음에는 /adminstrator.php에 GET 요청을 보내고 위의 JSON을 받았습니다. 그런 다음 토큰을 사용하여 로그인 요청을 한 다음 로그인에 성공했습니다.

Joomla는 프론트 및 백엔드에서 생성 된 토큰을 차별화하는 훌륭한 작업을 수행하는 것 같습니다.

희망이 도움이됩니다.