글 수정시 이미지의 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 을 허용해보세요.

흐으으으음 해당방법으로 $config->set('CSS.AllowedProperties', 'max-width'); 를 추가하여도

max-width는 먹히질않네요... 다른 style은 되는것같은데..max-width만 안되네요 감사합니다 ㅜㅜ

일단

 

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);

}

 

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

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

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

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