php項目本地部署如何保護源代碼

需求場景:需要在服務器A綁定證書和域名指向。服務器B上有完整的項目。需要訪問域名指向服務器A的網址,跳轉到服務器B

步驟:

  1. 服務器A上在域名指向的web根目錄下新建入口文件index.php,必須保證web server配置中默認優先訪問的文件是index.html。同級目錄下再新建index.html文件。index.html文件裏面將前端的vue文件引入。
  2. index.php文件中用curl擴展封裝好GET、POST、json等幾種請求方法,用來抓取服務器B的數據用
  3. 登錄信息的cookie處理:因爲curl只能抓取數據,而不能是設置cookie生效。所以當我們在index.php裏面再做一遍cookie的存儲處理:setcookie(‘token’, $token, time() + 18000, “/”);(服務器B的存儲已經不起作用了。)第四個參數說明的是當前所有目錄都可以存儲。
  4. 將用到的各個請求方式進行測試。
  5. 測試沒有問題後,將index.php文件加密或者混淆。如何加密和混淆自行百度:https://blog.csdn.net/lorraine_40t/article/details/86569722
    上代碼:
<?php
$bUrl = 'local.plam.fudacoldchain.cn';
$rUrl = $_SERVER['REQUEST_URI'];
if ($rUrl == '/') {
	$rUrl = 'admin/index/index';
    // var_dump($_SERVER['HTTP_HOST']);die;
    header("location: http://{$_SERVER['HTTP_HOST']}/index.html");
}
$url = $bUrl . $rUrl;
$rMethod = $_SERVER['REQUEST_METHOD'];

$token = getHeader('token');
if (!empty($token)) { // 如果傳值過來了token,將token存入
    setcookie("token", "", time()-1);
    setcookie('token', $token, time() + 18000, "/");
    $_COOKIE['token'] = $token;
} else { // 反之,從COOKIE讀取
    if (!empty($_COOKIE['token'])) {
        $token = $_COOKIE['token'];
    } else {
        $token = null;
    }
}

$json = file_get_contents('php://input');
if (!empty($json)) {
    $rMethod = 'JSON';
}
$header[] = "token: {$token}";
        // curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml")); 
switch ($rMethod) {
    case 'POST':
        // $header[] = "Content-Type: application/text; charset=utf-8";
        echo httpPostBody($url, $_POST, $header);
        die;
    case 'GET':
        echo httpGet($url, $header);
        die;
    case 'JSON':
        $header[] = "Content-Type: application/json; charset=utf-8";
        $header[] = "Content-Length: " . strlen($json); 
        echo httpPostRaw($url, $json, $header);
        die;
    default:
        die('非法訪問');
}

function httpPostRaw($url, $jsonString, $header=null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    ob_start();
    curl_exec($ch);
    $returnContent = ob_get_contents();
    ob_end_clean();
//    $returnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    return $returnContent;
}

function httpGet($url, $header= null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

function httpPostBody($url, $postData, $header = null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

function getHeader($name = '', $default = null)
{
    $header = [];
    if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
        $header = $result;
    } else {
        $server = $_SERVER;
        foreach ($server as $key => $val) {
            if (0 === strpos($key, 'HTTP_')) {
                $key = str_replace('_', '-', strtolower(substr($key, 5)));
                $header[$key] = $val;
            }
        }
        if (isset($server['CONTENT_TYPE'])) {
            $header['content-type'] = $server['CONTENT_TYPE'];
        }
        if (isset($server['CONTENT_LENGTH'])) {
            $header['content-length'] = $server['CONTENT_LENGTH'];
        }
    }
    $header = array_change_key_case($header);
    if (is_array($name)) {
        return array_merge($this->header, $name);
    }
    if ('' === $name) {
        return $header;
    }
    $name = str_replace('_', '-', strtolower($name));
    return isset($header[$name]) ? $header[$name] : $default;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章