2017-04-08 44 views
0
$db_connection = $_SERVER['DOCUMENT_ROOT'] . '/includes/install/database_connection.php'; 
if (!file_exists($db_connection)) { 
    require("install/xmlapi.php"); 
    if (isset($_POST['cpname'])) { 
     $opts['user'] = $_POST['cpname']; 
     $opts['pass'] = $_POST['cppass']; 
     $opts['temp'] = substr(str_shuffle(md5(time())),0,'12'); 
     $xmlapi = new xmlapi($_SERVER['HTTP_HOST']); 
     $xmlapi->set_port(2083); 
     $xmlapi->password_auth($opts['user'],$opts['pass']); 
     $xmlapi->set_debug(0); 
     $cpaneluser=$opts['user']; 
     $databasename="OSMP_DAT"; 
     $databaseuser="OSMP_admin"; 
     $databasepass=$opts['temp']; 
     $db = $databasename; 
     $user = $databaseuser; 
     $pass = $databasepass; 
     $loc = 'localhost'; 
     $createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename)); 
     $usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass)); 
     $addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array("".$cpaneluser."_".$databasename."", "".$cpaneluser."_".$databaseuser."", 'all')); 
     include ('install/installer.php'); 
     exit; 
    } 
    if (!isset($_POST['dbhost'])) { include ('install/db_installer.php'); } 
    if (isset($_POST['dbhost'])) { 
      // save connection details to $db_connection 
    } 
} 

上述代碼完美無瑕地工作,如人們所期望的。是否有可能獲得cpanel mysql數據庫前綴?

首先檢查database_connection.php是否存在。如果存在,則它包含包含數據庫詳細信息的文件。

如果不是 - 我們假設它是第一次安裝。所以我們要求用戶輸入cPanel登錄信息,我們的腳本創建數據庫並將詳細信息保存到database_connection.php。

唯一的問題是數據庫前綴。創建數據庫時,如果WHM具有爲用戶帳戶設置的數據庫前綴,則數據庫前綴將以數據庫名稱爲前綴。

我想知道如何確定是否有前綴,如果是的話如何找出它是什麼,這樣腳本也可以在數據庫名稱上加前綴。

注意我不是在尋找一個表的前綴,而是通過的cPanel添加數據庫前綴/南國

回答

0

因此很明顯的cPanel默認情況下,如果前綴啓用使用前8個字符的人的用戶名,隨後下劃線。這用於數據庫和數據庫名稱。

所以我簡單地修改上面的代碼如下:

$db_connection = $_SERVER['DOCUMENT_ROOT'] . '/includes/install/database_connection.php'; 
if (!file_exists($db_connection)) { 
    require("install/xmlapi.php"); 
    if (isset($_POST['cpname'])) { 
     $opts['user'] = $_POST['cpname']; 
     $prefix = substr($opts['user'],0,8).'_'; 
     if ($prefix === FALSE) {$prefix = $opts['user'];} 
     $opts['pass'] = $_POST['cppass']; 
     $opts['temp'] = substr(str_shuffle(md5(time())),0,'12'); 
     $xmlapi = new xmlapi(localhost); 
     $xmlapi->set_port(2083); 
     $xmlapi->password_auth($opts['user'],$opts['pass']); 
     $xmlapi->set_debug(1); 
     $cpaneluser=$opts['user']; 
     $databasename="OSMP_DAT"; 
     $databaseuser="osmp"; 
     $databasepass=$opts['temp']; 
     $pass = $databasepass; 
     $loc = 'localhost'; 
     $createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename)); 
     $usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass)); 
     $addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array($databasename, $databaseuser, 'all')); 
     $db = $prefix.$databasename; 
     $user = $prefix.$databaseuser; 
     include ('install/installer.php'); 
     exit; 
    } 
    if (!isset($_POST['dbhost'])) { include ('install/db_installer.php'); } 
    if (isset($_POST['dbhost'])) { 
     // save connection details to $db_connection 
    } 
} 

所以,現在進行檢查,以確定用戶名的長度,並且如果超過8個字符,其截斷爲8。然後該understore是作爲變量添加和輸出以傳遞到腳本的下一部分。

剩下的唯一缺陷就是我看到的是,如果主機已經禁用了whm的前綴,所以我很順利。

對於任何試圖在將來使用此代碼 - 記你 需要保證所包含的文件,或將有高達 安全問題。由於此代碼表示某人可以手動調用 install/db_installer.php或install/installer.php並繞過 (!file_exists($ db_connection))檢查,if(isset($ _ POST))和 (!isset $ _ POST [ 'DBHOST']))。

如果您不知道如何確保安全,請勿使用此代碼!

相關問題