[편리님] 내용관리의 html_purifier 필요성 여부
본문
내용관리에 아이프레임으로 지도 넣거나 html_purifier에서 지정된 html을 쓸 수 있는경우가 발생 할수 있을것 같아서요~
내용관리 페이지를 디자인 팀에서 사용하기 때문에 아이프레임이 안된다고 하여 임시적으로 아래처럼 적용하여 사용중입니다.
function html_purifier($html)
{
// 컨텐츠 페이지는 제외한다
if(preg_match("`\/bbs\/content\.php\?co_id\=`i", $_SERVER['REQUEST_URI']) && $_GET['co_id']) { return $html; }
$f = file(G5_PLUGIN_PATH.'/htmlpurifier/safeiframe.txt');
$domains = array();
foreach($f as $domain){
// 첫행이 # 이면 주석 처리
if (!preg_match("/^#/", $domain)) {
$domain = trim($domain);
if ($domain)
array_push($domains, $domain);
}
}
// 내 도메인도 추가
array_push($domains, $_SERVER['HTTP_HOST'].'/');
$safeiframe = implode('|', $domains);
include_once(G5_PLUGIN_PATH.'/htmlpurifier/HTMLPurifier.standalone.php');
$config = HTMLPurifier_Config::createDefault();
// data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
$config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
$config->set('HTML.SafeEmbed', true);
$config->set('HTML.SafeObject', true);
$config->set('HTML.SafeIframe', true);
$config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
}
추가1
---
>+ 관리자로 접속하여 내용관리를 하기 때문에 XSS공격을 차단 하기 위한 `html_purifier()`함수 사용이 무의미 하다.
추가2
---
>+ `html_purifier()` 제외 설정을 `$_GET['co_id']`만 추가 하였을 경우 게시판 뷰측 에서 파라미터로 `co_id`를 붙여 `html_purifier()` 함수를 건너 뛸 수 있을 가능성이 매우 클것 같습니다.
> 페이지 URI값을 가지고 정규식으로 매칭 하고 `$_GET['co_id']` 까지 검사 한다면 가능 하지 않을까 싶습니다.
추가3
---
>+ 게시판에서 `board.php?bo_table=test&wr_id=1&co_id=2222222&is_url=/bbs/content.php?co_id=`처럼 접속하는 유저에 대해서는 처리 방안이 떠오르지 않음
답변 1
말씀하신 부분에 대해서 검토를 해봤는데요..
내용관리 각각에서 html_purifier 함수 사용 여부를 선택할 수 있도록 하는 것으로 수정할 예정입니다.
conv_content 함수를 수정해서 참일 때만 html_purifier 함수를 거치도록 하는 게 좋을 것 같다는 결론에 도달했습니다.
답변을 작성하시기 전에 로그인 해주세요.