크롬80버전 결제 이슈, 영카트5 주요패치 확인!

htmlpurifier 질문요

그누보드5
영카트5
매뉴얼
Q & A
제작의뢰
컨텐츠몰
부가서비스
소모임
커뮤니티
htmlpurifier 질문요

QA

사수가 없어도 할 수 있다! 초보자를 위한 그누보드 FAQ

htmlpurifier 질문요

본문

게시글 보기페이지에서 글내용 출력시 $view['content']변수로 출력이 되던데

저 게시글 내용값이 가공되는 과정을 보다보니 common.lib.php에서

$content = html_purifier($content); 가 있더라구요.

글내용 값(wr_content)이 <p><img src="https://test.com/data/upload/editor/1909/썸네일파일이름.png" style="width:256px" ></p>입니다.

echo "전 : ".$content;

$content = html_purifier($content);

echo "후 : ".$content;

"전 : "에서는 잘나오는데 "후 : "에서는 <p></p>만 출력이 됩니다.

원인이 뭔가요?

이 글을 내 페이스북 계정으로 보내기 이 글을 내 트위터 계정으로 보내기

이 질문에 댓글 쓰기 :

답변 2

채택됨

마스타님의 답변

test.com 을 보니, 아마도 보안 때문에 가상으로 만드신 도메인 같은데요.. 

소스상 실제 도메인 및 파일이름 등을 알려 주셔야 도움을 드리는 분이 계실 것 같습니다. 

 

주소복사
채택됨
답변의 댓글

카알주님의 답변

/lib/commond.lib.php에 정의된 함수입니다.

// http://htmlpurifier.org/
// Standards-Compliant HTML Filtering
// Safe  : HTML Purifier defeats XSS with an audited whitelist
// Clean : HTML Purifier ensures standards-compliant output
// Open  : HTML Purifier is open-source and highly customizable
function html_purifier($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');
    include_once(G5_PLUGIN_PATH.'/htmlpurifier/extend.video.php');
    $config = HTMLPurifier_Config::createDefault();
    // data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
    $config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
    $config->set('HTML.SafeEmbed', false);
    $config->set('HTML.SafeObject', false);
    $config->set('Output.FlashCompat', false);
    $config->set('HTML.SafeIframe', true);
    if( (function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier')) ){
        $config->set('HTML.Nofollow', true);    // rel=nofollow 으로 스팸유입을 줄임
    }
    $config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
    $config->set('Attr.AllowedFrameTargets', array('_blank'));
    //유튜브, 비메오 전체화면 가능하게 하기
    $config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
    $purifier = new HTMLPurifier($config);
    return $purifier->purify($html);
}

 

위의 기능을 수행하는 함수입니다.
// Standards-Compliant HTML Filtering
// Safe  : HTML Purifier defeats XSS with an audited whitelist
// Clean : HTML Purifier ensures standards-compliant output
// Open  : HTML Purifier is open-source and highly customizable

HTML 필터링하고 보안체크하고 뭐 그런 기능이라 기본 html 태그를 제외하고 html 코드를 걸러버리는 위에 문의하신 결과가 나옵니다.

 

쉽게 테스트만 넣고 줄바꿈 정도만 되도록 하게 만드는 함수라고 생각하시면 될것 같습니다.

 

 

주소복사
답변의 댓글
답변을 작성하시기 전에 로그인 해주세요.
전체 125
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT