개발 꿀팁/PHP

팡웨이오 2o 시스템 도메인 이름 바인딩 해제 세부 사항

Jammie 2022. 8. 1. 16:25
반응형

방비오2o시스템은 빠른 전자몰 구축이 필요한 이용자에게 제공되는 전자몰형 웹시스템으로, 백그라운드를 통해 웹사이트가 운영되기 때문에 가소성이 강하며, 이 시스템을 2차 개발하려면 각 프로그래머가 로컬에서 설치·사용할 수 있어야 하며, 방비개발팀이 시스템 오남용·중복 구축을 제한하기 위해 고유 도메인 제한을 가하고 있어 모순이 발생하였으므로 아래 개인별 개발경험을 참고하여 불법활동에 사용할 수 없으며, 전재처 http://blog.csdn.net/haiqiao_2010를 참고하시기 바랍니다.



고유 도메인 이름 바인딩의 원리에이비오 2o 시스템 원리
1. 프로젝트가 성공적으로 설치된 후 처음 실행되면 프로그램에서 자동으로 ~public/runtime/~core.php 파일을 생성합니다. 이 파일의 홈페이지는 현재 도메인 인증 여부를 판단하는 데 사용됩니다.

2. 파일~public/runtime/~core.php는 프로젝트에 따라 암호화된 파일 license(프로젝트 루트 아래에 위치하며, 큐브 차원이 암호화된 도메인 라이센스 파일이며, 이 파일은 사이트 런타임에 존재 여부를 판단하며, 존재하지 않을 경우 비정상적인 "domain not authorized" 즉 도메인 이름이 허가되지 않음)를 던짐으로써 복호화되어 생성됩니다. 키는 파일~system/utils/es_key.php;

3. 파일 ~ public/runtime/~core.php는 도메인 권한 부여 여부 기능뿐만 아니라 프로젝트 실행의 기본 프레임워크 파일의 로드 및 구성 역할도 담당합니다. 따라서 단순히 파일을 삭제 ~ public/runtime/~core.php는 웹 사이트를 실행할 수 없게 됩니다. 이때 이 파일을 해독하고 웹 사이트 실행의 부족한 구성을 보충해야 합니다.



큐브 2o 시스템 바인딩의 고유 도메인 이름 해독 방법
1. 웹 사이트를 실행하기 전에 파일을 생성해야 합니다. ~ public/runtime/~core.php 이 파일을 자동으로 생성하지 않도록 합니다.

2. 파일 ~ public/runtime/~core.php의 역할은 지정된 도메인 이름을 바인딩하고 프로젝트의 구조를 개선하여 프로젝트가 정상적으로 동작할 수 있도록 하는 것입니다

 

~ public/ runtime/ ~ core.php 파일 재작성
~ core.php 파일의 덮어쓰기, 코드는 다음과 같습니다

<?php 
/*
* desc: init_checker()현재 도메인 인증 여부 감지
hyonjae domein injeung yobu gamji
*return:true or false
*/
function init_checker($str)
{
	If(empty($str))
	{
		return false;
	}
	$arr = explode("|",base64_decode($str));		
	$arr = unserialize($arr[1]);
	foreach($arr as $k=>$v)
	{
		$arr[$k] = base64_decode(base64_decode($v));
	}	
	$host = $_SERVER['HTTP_HOST'];
	$host = explode(":",$host);
	$host = $host[0];
	$passed = false;
	if(!in_array($host,$arr))
    {
    	return false;
    }
	return true;
} 
//메소드를 호출하여 현재 도메인 이름이 허가되었는지 여부를 판단하고, 허가되지 않은 경우 이상을 던져 프로세스를 종료한다
$urldecode=" ";//암호화된 인코딩 문자열
	$checker = init_checker($urldecode);
if(!$checker)die("domain not authorized");
 
//도메인 네임 라이선스가 통과된 후, 프로젝트의 구조를 개선하여 프로젝트가 정상적으로 운영될 수 있도록 보장합니다
//캐시 정의
require APP_ROOT_PATH.'system/cache/Cache.php';
$cache = CacheService::getInstance();
require_once APP_ROOT_PATH."system/cache/CacheFileService.php";
$fcache = new CacheFileService();  //정적 데이터 저장용 캐시 인스턴스
$fcache->set_dir(APP_ROOT_PATH."public/runtime/data/");
//end 캐시 정의
 
//DB 정의
require APP_ROOT_PATH.'system/db/db.php';
define('DB_PREFIX', app_conf('DB_PREFIX')); 
if(!file_exists(APP_ROOT_PATH.'public/runtime/app/db_caches/'))
	mkdir(APP_ROOT_PATH.'public/runtime/app/db_caches/',0777);
$pconnect = false;
$db = new mysql_db(app_conf('DB_HOST').":".app_conf('DB_PORT'), app_conf('DB_USER'),app_conf('DB_PWD'),app_conf('DB_NAME'),'utf8',$pconnect);
//end 定义DB
 
 
//템플릿 엔진 정의
require  APP_ROOT_PATH.'system/template/template.php';
if(!file_exists(APP_ROOT_PATH.'public/runtime/app/tpl_caches/'))
	mkdir(APP_ROOT_PATH.'public/runtime/app/tpl_caches/',0777);	
if(!file_exists(APP_ROOT_PATH.'public/runtime/app/tpl_compiled/'))
	mkdir(APP_ROOT_PATH.'public/runtime/app/tpl_compiled/',0777);
$tmpl = new AppTemplate;
 
//end 템플릿 엔진 정의
$_REQUEST = array_merge($_GET,$_POST);
filter_request($_REQUEST);
$lang = require APP_ROOT_PATH.'/app/Lang/'.app_conf("SHOP_LANG").'/lang.php';
 
?>

이 파일에서 변수 $urldecode는 인증된 도메인 이름 문자열을 위해 인증된 도메인 이름을 암호화하는 방법 domain_encryption()이다

/*
 * desc:domain_encryption()인증된 도메인 이름을 암호화하는 방법
* param:$arr인증된 도메인 이름 또는 IP 배열
* return:$str 암호화된 도메인 이름 문자열을 반환합니다
*/
function domain_encryption($arr=array())
{
	if (count($arr>0))
	{
		foreach ($arr as $k=>$v)
		{
			$domain_array[]=base64_encode(base64_encode($v));
		}
	}
	return base64_encode(base64_encode(serialize($domain_array))."|".serialize($domain_array));
}
 
echo domain_encryption(array("imember.cc","localhost","127.0.0.1"));
반응형