common.php 에서 include_once('config.php')에 공들이는 이유
본문
common.php 에서
function g5_path()
{
$chroot = substr($_SERVER['SCRIPT_FILENAME'], 0, strpos($_SERVER['SCRIPT_FILENAME'], dirname(__FILE__)));
$result['path'] = str_replace('\\', '/', $chroot.dirname(__FILE__));
$server_script_name = preg_replace('/\/+/', '/', str_replace('\\', '/', $_SERVER['SCRIPT_NAME']));
$server_script_filename = preg_replace('/\/+/', '/', str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']));
$tilde_remove = preg_replace('/^\/\~[^\/]+(.*)$/', '$1', $server_script_name);
$document_root = str_replace($tilde_remove, '', $server_script_filename);
$pattern = '/.*?' . preg_quote($document_root, '/') . '/i';
$root = preg_replace($pattern, '', $result['path']);
$port = ($_SERVER['SERVER_PORT'] == 80 || $_SERVER['SERVER_PORT'] == 443) ? '' : ':'.$_SERVER['SERVER_PORT'];
$http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
$user = str_replace(preg_replace($pattern, '', $server_script_filename), '', $server_script_name);
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
if(isset($_SERVER['HTTP_HOST']) && preg_match('/:[0-9]+$/', $host))
$host = preg_replace('/:[0-9]+$/', '', $host);
$host = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", '', $host);
$result['url'] = $http.$host.$port.$user.$root;
return $result;
}
$g5_path = g5_path();
include_once($g5_path['path'].'/config.php'); // 설정 파일
unset($g5_path);
에서
1. g5_path() 함수는 보안목적상 복잡하게 처리를 하는 것 같은데 맞나요?
2. 다른 파일을 include_once 할 때와 다르게 config.php 만 특별하게 처리하는 이유가 있나요?
답변 2
g5_path() 가 복잡한 이유는
그누보드가 설치되는경로가 사용자 마다 다 다릅니다.
시스템의 경로하위가 아니라.
보통은 웹호스팅의 하위경로 혹은
서브디렉토리로 사용하는경우도 상당히 많은것으로 알고있습니다.
그러면
G5_PATH라는 기준점을 잡기가 애매한거죠
그래서
common.php가 작동되는 시작디렉토리를 찾아내는 일이 어렵죠
사용자마다 다르게 셋팅하지 않아도
g5_path()라는 함수를 이용해
그누보드 설치디렉토리를 G5_PATH로 지정하게 만드는 기능이라서
중요합니다.
그런것을 다 판단해서 리자님을 비롯한 그누보드 직원들이 공을 들인것으로 생각됩니다.
같은 이유로 설치디렉토리에 존재하는 config.php의 접근이 중요하게 되죠
1. 변수 초기화만 해도 보안 문제는 거의 해결됩니다.
그보다는 다양한 상황에서도 정확하게 동작하기 위해서죠.
2. 질문이 잘 이해가 안 되네요.