HTMLFilter v.1.0 최종버젼 > 그누4 스킨

그누4 스킨

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

HTMLFilter v.1.0 최종버젼 정보

기타 HTMLFilter v.1.0 최종버젼

본문

기본 사용법:

include_once('HTMLFilter.php');
$filter = new HTMLFilter();
$content = $filter->parse($content);

사용함수:

1. use_rgb(): rgb(255,255,255)와 같은 형식을 그대로 사용하고자 할 때 씁니다.
기본값은 헥스형식(예 #FFFFFF)으로 전환됩니다.
예:
$filter->use_rgb();
$content = $filter->parse($content);

2. set_tag($tagname, $set=false): 기본적으로 HTMLFilterConfig.php 파일에서 세팅되어 있으나
일시적으로 세팅을 바꾸고자 할경우 사용합니다. 혹은 새로운 태그를 정의하는 것도 가능합니다.
예:
기본적으로 meta 태그는 false로 지정되어 있습니다. 직접 HTMLFilterConfig.php파일을 수정하여도 되나
set_tag함수를 이용하여 바꿀 수 있습니다.
$filter->set_tag('meta', true);
$content = $filter->parse($content);

새로운 태그 정의
$filter->set_tag('convas', true);

3. set_tag_attribute($tagname, $attrname, $set=false): set_tag()와 마찬가지로 각 태그의 속성을 바꿀 때 사용합니다.
예:
$filter->set_tag('convas', true)
$filter->set_tag_attribute('convas', 'width', true);
$filter->set_tag_attribute('convas', 'height', true);
$content = $filter->parse($content);

4. add_block_url_syntax($syntax): 금지하고 싶은 URL의 정규식을 추가합니다. HTMLFilterConfig.php 파일의 $block_url_syntax에 추가하여도 됩니다.
이전 버젼의 add_prohibited_url_syntax의 이름이 add_block_url_syntax로 바뀌었습니다.
예:
$filter->add_block_url_syntax('/hackers\.web\.net/i');
$content = $filter->parse($content);

HTMLFilterConfig.php

HTMLFilterConfig.php 파일은 반드시 HTMLFilter.php와 동일한 디렉토리내에 있어야 합니다.
이전의 $prohibited_url_syntax의 이름이 $block_url_syntax로 바뀌었습니다.

사용 Class 변수:

1. $block_url_syntax: 차단 URL의 정규식을 적어야 합니다. 정규식에 익숙하지 못하면 preg_quote를 이용하세요.
예:
var $block_url_syntax = array(
 '/'.preg_quote('sir.co.kr').'/i'
 );

2. $css_syntax: 허용할 css 정규식입니다. {width: 50px}라는 css가 있을 때 50px와 같이 속성값 부분을 체크할 때 쓰일 정규식입니다. 기본값은 '/^([a-z0-9#\!\.\,\-\*가-힣ㄱ-ㅎㅏ-ㅣ\t ]+)$/i' 입니다. 이정도면 대부분은 문제없을거라 생각됩니다.

3. $attributes_need_url_filtering: URL 필터링이 필요한 속성들입니다. 예로 background:url('javascript:alert('XSS')로 필터링이 필요한 속성을 추가하면 됩니다.

4. $script_types: URL에서 스크립이 가능하게 하는 값들입니다.

5. $object_security: <object>태그에서 보안상 설정이 필요한 변수들을 적습니다.

6. $tags: 사용할 태그들을 정합니다. 목록에 없거나 값이 false인 태그는 제거됩니다.

7. $tag_attributes: 사용할 태그의 속성을 정합니다. 목록에 없거나 값이 false인 속성은 제거됩니다.

8. $unanalyzed_tags: 이 변수는 되도록이면 변경을 하지 말기 바랍니다. textarea나 style이나 script 태그는 같은 태그 이름으로 닫혀야 합니다. 즉 <textarea>는 </textarea>로 닫아야 하며 중간에 어떤 태그가 오더라도 textarea의 텍스트로 인식됩니다.

9. $empty_tags: xhtml 형식으로 전환을 위해 필요합니다. 예로 <br>은 닫는 태그가 없으므로 <br />의 형식으로 전환됩니다.

10. $empty_attributes: xhml형식을 위한 빈 속성값을 가질 수 있는 속성입니다. 비어있는 속성은 그대로 그 값을 갖습니다.  예로 <input type="text" readonly><input type="text" readonly="readonly" />로 전환됩니다.

11. $css_properties: css에서 사용할 속성을 정합니다. 목록에 없거나 값이 false인 속성은 제거됩니다.

 

그누보드에 추가하기:

lib 폴더에 htmlfilter라는 폴더 생성후 압축된 파일을 그곳에 풀어
그 폴더 안에 HTMLFilter.php 및 HTMLFilterConfig.php가 있게 하세요.

그리고 lib/common.lib.php파일을 열어 conv_content()함수를 찾아 다음으로 교체합니다.

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

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

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

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

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

  $content = get_text($content, 1);
  $content = url_auto_link($content);
 }

 return $content;
}

추천
6
  • 복사

댓글 전체

기왕에 작업하신거 오픈코드 프로젝트로 구글에 등록해 보심이 어떨까요?
http://code.google.com/hosting/

owasp에서 php filter를 만들다가 중단했네요.
http://www.owasp.org/index.php/OWASP_PHP_Filters

php 5.2부터는 filter 기능이 기본으로 들어갔데요.
생각보다 좋은거 같은데 국내에서는 별로 사용이 없는거 같아요.
http://sir.co.kr/bbs/board.php?bo_table=tip_php&wr_id=1071
대부분의 filter는 정규식을 이용합니다. 그런데 정규식에는 구멍이 너무 많아요... 해커들은 그 구멍을 이용하구요... 예로<img alt=">'hi<b " src="hackers web">이런경우 정규식이 앞의 img만 검사하는 경우도 있습니다.

그렇지 않은 경우는 lexer를 작성해서 쓰는데 문제는 lexer를 쓰면 프로그램이 무거워진다는 점이죠. 그래서 저는 독자적으로 parser를 개발한 겁니다.

개발하는 게 쉽지 않기에 저도 여러번 쓸만한 filter를 찾아보았지만 없어서 그냥 개발하기로 결심했구요... 바쁘기도 했지만 이렇게 나와서 기쁩니다.
© SIRSOFT
현재 페이지 제일 처음으로