簡體   English   中英

是否可以獲取cpanel mysql數據庫前綴?

[英]Is it possible to obtain a cpanel mysql database prefix?

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

上面的代碼可以像人們期望的那樣完美地工作。

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

如果不是,我們假設是第一次安裝。 因此,我們向用戶詢問cpanel登錄詳細信息,並且我們的腳本創建了數據庫並將詳細信息保存到database_connection.php。

唯一的問題...是數據庫前綴。 創建數據庫時,如果WHM為用戶帳戶設置了數據庫前綴,則數據庫前綴將作為數據庫名稱的前綴。

我想知道如何確定是否有前綴,以及如何確定前綴,以便腳本也可以在數據庫名稱上添加前綴。

注意我不是在尋找表前綴,而是cpanel / whm添加的數據庫前綴

因此,顯然,如果啟用了前綴,默認情況下cpanel將使用一個username的前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。然后添加底層存儲並將其作為變量輸出,以傳遞到腳本的下一部分。

我所看到的唯一的缺陷是主機是否已禁用whm中的前綴,因此我的工作進展順利。

對於以后嘗試使用此代碼的任何人-請注意,您需要保護包含的文件,否則將遇到巨大的安全問題。 按照此代碼,有人可以手動調用install / db_installer.php或install / installer.php並繞過(!file_exists($ db_connection))檢查以及if(isset($ _ POST))和(!isset($ _ POST [ 'DBHOST']))。

如果您不知道如何保護它,請不要使用此代碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM