글 수정시 이미지의 max-width값이 사라집니다

글 수정시 이미지의 max-width값이 사라집니다

QA

글 수정시 이미지의 max-width값이 사라집니다

본문

a사이트 b사이트가있습니다

 

b사이트는 a사이트 복제본으로 그냥 내부안쪽코드까지 다똑같은 사이트입니다

 

a사이트에 업데이트전 테스트하는 사이트가 b사이트인데요

 

최근에는 업데이트하고있는게없기때문에 완전 동일한 코드를 가지고있습니다만...

 

글수정을할때 이미지가있으면

 

a사이트는 max-width:100%가 사라지고 DB에 저장도안되어있는 alt도 붙여서 출력되는 반면에

b사이트는 입력받은 그대로를 출력합니다

 

코드가 다를께없기에.. 이것저것 건드려보다가(심지어 파일도 두사이트에 동일하게 다시 올려봤습니다...)

 

html_purifier여기서 문제인것을 발견하였습니다

 

html_purifier에서 img태그의 max-width를 삭제하는게 있나요?

 

html_purifier를 적용안하고 출력하면 max-width를 삭제하지않고 그대로 출력하더군요(a사이트)

 

근데 의아한건 b사이트는 그런게없다는점입니다...하하...

 

a사이트 b사이트 차이점이라곤 a사이트는 .kr 이라는것과 b사이트는 .com이라는것 정도..?

이게 달라서 그런걸까요...

 

글수정일때 계속 max-width가 사라지니 글수정을 완료하면 이미지가 페이지를 뚫어버려서 미치겠네요 하하... 도움쫌 부탁드립니다 ㅜㅜ

이 질문에 댓글 쓰기 :

답변 2

lib/common.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);
}

 

위 함수를 아래 내용을 참고해서

https://stackoverflow.com/questions/7813501/how-to-allow-inline-style-tags-in-html-purifier-filtering

 inline style 을 허용해보세요.

일단

 

write.php의

 

if ( $w == 'u' && (! $is_member || ! $is_admin || $write['mb_id'] !== $member['mb_id']) ){

  // kisa 취약점 제보 xss 필터 적용

  $content = get_text(html_purifier($write['wr_content']), 0);

}

 

 

if ( $w == 'u' && ! $is_admin && (! $is_member || $write['mb_id'] !== $member['mb_id']) ){

  // kisa 취약점 제보 xss 필터 적용

  $content = get_text(html_purifier($write['wr_content']), 0);

}

 

로 바꾸어 어드민일때는 안쓰는걸로 임시 조취하였습니다

관리자가 다른사람의 글을 수정할때 나오는 현상이였네요... 홈페이지내에 포트폴리오가있는데 이걸 각각계정이 등록하고 관리자가 수정하다보니 발생하는 현상이였습니다 일단..이렇게 처리합니다..

답변을 작성하시기 전에 로그인 해주세요.
전체 16
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT