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
그렇지 않은 경우는 lexer를 작성해서 쓰는데 문제는 lexer를 쓰면 프로그램이 무거워진다는 점이죠. 그래서 저는 독자적으로 parser를 개발한 겁니다.
개발하는 게 쉽지 않기에 저도 여러번 쓸만한 filter를 찾아보았지만 없어서 그냥 개발하기로 결심했구요... 바쁘기도 했지만 이렇게 나와서 기쁩니다.
그누정식 버전에서 추가할때까지 ㄱㄱ