HTMLFilter v.0.5 (수정) > 그누4 스킨

그누4 스킨

스킨의 저작권은 해당 스킨 제작자님께 있으며, 그누보드의 저작권과 다를 수 있습니다.
스킨 다운로드시 좋아요와 감사의 코멘트를 남기시면 제작자에게 큰 힘이됩니다. ^^y
그누보드와 관련이 있지만 스킨과 빌더가 아니면 플러그인 게시판에 올려주세요.

HTMLFilter v.0.5 (수정) 정보

기타 HTMLFilter v.0.5 (수정)

본문

HTMLFilter v.0.5가 릴리즈 되었습니다. 오늘 시간이 생겨 집중적으로 코딩을 확인하고 업데이트를 완료했습니다.


업데이트 및 특징:

1. 전에 실수로, decimal notation을 이용한 XSS 공격에 대한 필터링이 잘못되었음을 확인 수정했습니다.
예: &# 0000106&# 0000097&# 0000118&# 0000097&# 0000115&# 0000099&# 0000114&# 0000105&# 0000112&# 0000116&# 0000058&# 0000097&# 0000108&# 0000101&# 0000114&# 0000116&# 0000040&# 0000039&# 0000088&# 0000083&# 0000083&# 0000039&# 000004(의도적으로 #다음에 공백을 넣었습니다)

2. 태그 깨짐을 방지하는 최소한 코딩을 넣었습니다. 즉 <div><em>연습<i>코드</em>라고 적으면 HTMLFilter는 <div><em>연습<i>코드</i></em></div>로 수정을 해줍니다. 사용자나 혹은 관리자가 확인을 하지 않아도 최소한 화면 깨짐은 방지가 되리라 생각됩니다. 예로 table관련.

3. 약속한대로 v.0.5부터는 라이센스가 GPL로 수정되었습니다. 아울러 unpack버젼도 같이 들어있으므로 필터링 공부를 하실 분들에게는 도움이 될거라 생각됩니다. 필터링 엔진은 javascript때부터 만들어 오던 걸로 3년이 걸린 것 같네요.


4. 이번 버젼에서는 태그 깨짐을 방지하므로 lib/common.lib.php 파일의 conv_content 함수를 다음과 같이 더 짧게 수정이 가능합니다.:

function conv_content($content, $html)
{
  global $config, $board;

    if ($html)
    {
  include_once("$g4[path]/lib/HTMLFilter.php");
  $filter = new HTMLFilter();

        if ($html == 2) { // 자동 줄바꿈
$content = preg_replace("/\n/", "<br/>", $content);
        }

        // XSS (Cross Site Script) 막기
  $content = $filter->parse($content);
    }
    else // text 이면
    {
        // & 처리 : &amp; &nbsp; 등의 코드를 정상 출력함
        $content = html_symbol($content);

        // 공백 처리
//$content = preg_replace("/  /", "&nbsp; ", $content);
$content = str_replace("  ", "&nbsp; ", $content);
$content = str_replace("\n ", "\n&nbsp;", $content);

        $content = get_text($content, 1);

        $content = url_auto_link($content);
    }

    return $content;
}

5. 또한 금지하고 싶은 URL을 추가할 때 HTMLFilterConfig.php파일에서 $prohibited_url_syntax에 추가하여도 되고 혹은 add_prohibited_url_syntax 라는 method를 이용하면 됩니다.
예:
include_once 'HTMLFilter.php';
$filter = new HTMLFilter();
$filter->add_prohibited_url_syntax('#sir\.co\.kr/adm/#i');
$filter->add_prohibited_url_syntax('#hackers\.net#');
$content = $filter->parse($content);


6. FireFox에서 rgb(255,255,255)의 형태를 헥스 형태로 자동으로 바꾸어줍니다. rgb함수를 그대로 쓰길 원하면 set_RGB_usage(true)를 이용하면 됩니다.
예:
$filter->set_RGB_usage(true);
$content = $filter->parse($content);


버그를 더이상 찾지 못하거나 기능추가를 할 것이 없다면 정식버젼이 될 수도 있습니다.

추가: UTF-8과 EUC-kr버젼 두개로 나누었습니다.
추천
2

댓글 전체

수고하셨습니다.
이제서야 코드를 쭈~욱 봤는데 고생하셨습니다.
방어도 꽤 괜찮은것 같습니다..
그러나 초보자들이나 잘 모르는 사용자들에게는 태그허용을 하나씩 허용(true/false)하는건 어려움이 좀 있을듯 합니다.  태그의 수도 상당하고..

블럭으로 태그를 허용하는등의 편리&사용의 간편성이 포함되면 더 좋을듯 합니다.
(예를 들어, div/on 등으로 로 시작하는 태그는 모두 허용하는 등의...)
물론 블럭은 차순위고 우선순위는 개별설정에 준다는 것도 고려야 되면 더 좋을듯 합니다.
HTMLFilterConfig.php 파일에서 $tags안에 있는 태그들의 설정을 false로 바꾸면 아래 $tag_attributes를 손대지 않아도 우선 차원에서 false로 놓은 태그들은 차단이 됩니다. 다음으로 $tag_attributes에서 각 태그의 속성을 제어가 가능하구요.

그리고 현재의 설정은 XSS를 막기위한 최소한의 설정을 $tags및 $tag_attributes에 해놓았습니다. 하지만 각 개개인이 취향에 따라 바꾸고 싶거나 혹은 다른 용도로 쓰고자 하는 것도 있을 수 있으니까 config파일을 따로 둔 겁니다.
오늘이나 내일 쯤 정식판이 나올 것 같습니다. 시간이 날 때마다 이것만 붙들고 있는 거 같네요...

현재까지의 개발판을 미리 맛보고 싶은 분은 http://richarea.net/htmlfilter/ajax_filter_test.html로 테스트하면 됩니다. http://ha.ckers.org/xss.html 에서 언급하고 있는 대부분의 것은 해결되었다고 봅니다.
전체 5,850 |RSS
그누4 스킨 내용 검색

회원로그인

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