XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | rhymix |
---|---|
출처URL | https://xetown.com/topics/1665887 |
외부페이지로 불러오는 로컬 파일에 PHP 코드나 템플릿 코드가 포함되어 있는 경우, 이를 이용하여 공격자가 서버단에서 실행되는 임의의 코드를 주입할 수 있는 원격 코드 실행(RCE) 취약점입니다.
https://xetown.com/topics/1665887 참조
modules/page/page.mobile.php
function dispPageIndex 함수에서
if($this->module_srl) Context::set('module_srl',$this->module_srl);
아래에 추가
// Firt line of defense against RVE-2022-2.
foreach (Context::getRequestVars() as $key => $val)
{
if (preg_match('/[\{\}\(\)<>\$\'"]/', $key) || preg_match('/[\{\}\(\)<>\$\'"]/', $val))
{
$this->setError(-1);
$this->setMessage('msg_invalid_request');
return;
}
}
modules/page/page.view.php 에서
function dispPageIndex() 함수에서
if($this->module_srl) Context::set('module_srl',$this->module_srl);
아래에 추가
// Firt line of defense against RVE-2022-2.
foreach (Context::getRequestVars() as $key => $val)
{
if (preg_match('/[\{\}\(\)<>\$\'"]/', $key) || preg_match('/[\{\}\(\)<>\$\'"]/', $val))
{
$this->setError(-1);
$this->setMessage('msg_invalid_request');
return;
}
}
function executeFile 함수에서
FileHandler::writeFile($cache_file, $content);
아래의
// Include and then Return the result
if(!file_exists($cache_file)) return;
// Attempt to compile
$oTemplate = &TemplateHandler::getInstance();
$script = $oTemplate->compileDirect($filepath, $filename);
FileHandler::writeFile($cache_file, $script);
부분을 전체 주석 또는 삭제
그 아래의
$__Context = &$GLOBALS['__Context__'];
$__Context->tpl_path = $filepath;
ob_start();
include($cache_file);
$contents = '';
while (ob_get_level() - $level > 0) {
$contents .= ob_get_contents();
ob_end_clean();
}
return $contents;
이 부분을
// Don't compile, just return to prevent RVE-2022-2.
return file_get_contents($cache_file);
로 대체