Скрипт для безопасного входа cPanel с PHP

С недавнего времени cPanel изменил способ входа в систему.

До входа в систему URL-адрес: https: // accessurl: 2083 /

После входа в систему: https: // accessurl: 2083 / cpsessXXXX / frontend / x3 / index.html? Post_login = 89711792346495

Вы заметите, что cpsessXXXX встроен в URL-адрес.

И страница для доступа к AWSTATS: https: // accessurl: 2083 / cpsessXXXX / awstats.pl? Config = domain_name & ssl = & lang = ru

Я пробовал следующий PHP-код

$username = 'xxx'; $password = 'xxx'; $loginUrl = 'https://<accessurl>'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $loginUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'user='.$username.'&pass='.$password); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PORT,2083); $store = curl_exec($ch); curl_close($ch); 

Когда я перехожу через код, значение $ store является FALSE, что означает, что процесс входа в систему завершился неудачно.

Единственная ссылка, которую я нашел в Интернете на аналогичную проблему, находится в http://blog.mcfang.com/ в записи от 28 марта.

Я надеялся, что файл cook.txt будет иметь информацию cpsessXXXX, но файл не создается.

Спасибо за любую помощь

Вам нужно указать маркер безопасности на cPanel, чтобы ваш сценарий был принят. В соответствии с документацией в документации cPanel для токенов безопасности

Возьмем следующий пример:

 function createSession() { // Example details $ip = "127.0.0.1"; $cp_user = "username"; $cp_pwd = "password"; $url = "http://$ip:2082/login"; $cookies = "/path/to/storage/for/cookies.txt"; // Create new curl handle $ch=curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); // Save cookies to curl_setopt($ch, CURLOPT_POSTFIELDS, "user=$cp_user&pass=$cp_pwd"); curl_setopt($ch, CURLOPT_TIMEOUT, 100020); // Execute the curl handle and fetch info then close streams. $f = curl_exec($ch); $h = curl_getinfo($ch); curl_close($ch); // If we had no issues then try to fetch the cpsess if ($f == true and strpos($h['url'],"cpsess")) { // Get the cpsess part of the url $pattern="/.*?(\/cpsess.*?)\/.*?/is"; $preg_res=preg_match($pattern,$h['url'],$cpsess); } // If we have a session then return it otherwise return empty string return (isset($cpsess[1])) ? $cpsess[1] : ""; } 

cpsess используется для добавления URL-адресов в правильный токен, который ожидает cPanel.

Вы можете отправить строку «Авторизация» заголовками, добавляя эту простую строку:

 $header[0] = "Authorization: Basic " . base64_encode($cp_user.":".$cp_pwd) . "\n\r"; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 

Таким образом, вы можете отправить запрос непосредственно на ресурс $ myResource, без файлов cookie и всего остального. Просто:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $myResource); $header[0] = "Authorization: Basic " . base64_encode($cp_user.":".$cp_pwd) . "\n\r"; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PORT,2083); $store = curl_exec($ch); curl_close($ch); 

Вы должны рассмотреть возможность использования XML API для CPanel . В Github вы можете найти класс xmlapi-php , он отлично работает и поможет мне легко и просто обновить код!