2012-07-03 3 views
9

나는 HTMLPurifier을 사용하여 HTML 문자열을 살균합니다 (보안에 관한 것입니다).HTMLPurifier : 전체 허용 목록을 재정의하지 않고 하나의 속성을 허용하는 방법

HTMLPurifier가 호출되면 일부 속성 (예 : width 또는 height)이 제거됩니다. 이 문제는 보안 문제로 생각하지 않습니다.

허용 된 사이트 목록을 재정의하지 않고이 속성을 추가하려면 어떻게해야합니까?

는 I에 유래와 HTMLPurifier 문서에 검색하지만, 유일한 해결책은 될 것으로 보인다 :

$config->set('HTML.Allowed', 'p,b,a[href],i'); 

하지만 허용 된 사이트 목록 (I 기본 신뢰 HTMLPurifier을 다시 정의하지 않기 때문에이는 해결책이 아니다 구성, 난 그냥 예외를 추가하고 싶습니다).

답변

3

이 코드 :

<img width="200" height="200" src="test.jpg" alt="bla" /> 
<table width="100"><tr><td>test</td></tr></table> 

PHP 5.3.10 및 HTMLPurifier 버전 4.4.0을 사용하여 :

<?php 

require('purifier/library/HTMLPurifier.auto.php'); 

$html = "<img width='200' height='200' src='test.jpg' alt='bla>"; 
$config = HTMLPurifier_Config::createDefault(); 
$purifier = new HTMLPurifier($config); 
echo $purifier->purify($html) . "\n"; 

$html = "<table width='100'><tr><td>test</td></tr></table>"; 
echo $purifier->purify($html) . "\n"; 

?> 

이 출력을 생성합니다. 따라서 이러한 속성은 기본적으로 제거되지 않습니다 (HTMLPurifier를 새로 설치합니다).

너비/높이 속성을 사용하는 HTML 요소는 무엇입니까?

또한 xhtml strict를 사용할 때 잘못된 속성이 제거됩니다. img 및 table 요소의 너비와 높이는 내가 아는 한 허용되지만 소문자 여야합니다. 이미지 요소에서 '너비 ='100 % ''를 제외하고 (자신의 설명에 따라 2 분 뒤에 완성 됨)

일반적으로 허락 목록 대신 addAttribute을 사용하여 허용 된 속성을 추가합니다.

+0

'xhtml strict를 사용할 때 유효하지 않은 속성이 제거됩니다.'-> Ok, thanks! 'width = "100 %"'를 사용했는데 유효하지 않습니다. –

+0

"일반적으로 허용 된 속성을 추가하려면 화이트리스트 대신 addAttribute를 사용하십시오." -> 고마워! 그게 다야! –

0

마법 인용 부호를 끕니다.

+0

이유는 무엇입니까? 나는 당신의 대답을 이해하지 못합니다 ... 좀 더 설명해 주시겠습니까? –

+0

http://htmlpurifier.org/docs#toclink5 "내 속성이 신비하게 사라지고 있습니다" –

+0

감사합니다. 그러나 마술 따옴표는 이미 떨어져있다. 내 질문은 "전체 허용 목록을 재정의하지 않고 단일 속성을 허용하는 방법"입니다 (또는 가능할 수도 있습니다). –

5

동일한 문제가 발견되었고 유일한 해결 방법은 허용 목록 설정에서 HTML 허용 자 속성 설정에 허용 목록 스타일을 붙여 넣는 것입니다.

화이트리스트 설정은 다음과 같습니다

a.class, 
a.href, 
a.id, 
a.name, 
a.rev, 
a.style, 
a.title, 
a.target, 
a.rel, 
abbr.title, 
acronym.title, 
blockquote.cite, 
div.align, 
div.style, 
div.class, 
div.id, 
font.size, 
font.color, 
h1.style, 
h2.style, 
h3.style, 
h4.style, 
h5.style, 
h6.style, 
img.src, 
img.alt, 
img.title, 
img.class, 
img.align, 
img.style, 
img.height, 
img.width, 
li.style, 
ol.style, 
p.style, 
span.style, 
span.class, 
span.id, 
table.class, 
table.id, 
table.border, 
table.cellpadding, 
table.cellspacing, 
table.style, 
table.width, 
td.abbr, 
td.align, 
td.class, 
td.id, 
td.colspan, 
td.rowspan, 
td.style, 
td.valign, 
tr.align, 
tr.class, 
tr.id, 
tr.style, 
tr.valign, 
th.abbr, 
th.align, 
th.class, 
th.id, 
th.colspan, 
th.rowspan, 
th.style, 
th.valign, 
ul.style 
+0

감사합니다. 이것은 [업데이트 된 목록] (http://htmlpurifier.org/live/smoketests/printDefinition.php)입니다 (요소 섹션에 있음). –

관련 문제