2012-07-03 16 views
9

Używam HTMLPurifier do odkażania ciągu HTML (chodzi o bezpieczeństwo).HTMLPurifier: Jak zezwolić na pojedynczy atrybut bez przedefiniowania całej białej listy

Niektóre atrybuty (takie jak width lub height) są usuwane po wywołaniu obiektu HTMLPurifier. Nie uważam tego za problem związany z bezpieczeństwem.

Jak mogę dodać ten atrybut bez przedefiniowania białej listy?

Szukałem na dokumentacji Stackoverflow i HTMLPurifier, ale jedynym rozwiązaniem wydaje się być:

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

Ale to nie jest rozwiązanie, bo nie chcą przedefiniować białej listy (Ufam domyślnego HTMLPurifier konfiguracja, chcę tylko dodać wyjątek).

Odpowiedz

3

ten kod:

<?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"; 

?> 

Wytwarza to wyjście:

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

pomocą PHP 5.3.10 i HTMLPurifier wersji 4.4.0. Dlatego te atrybuty nie są domyślnie usuwane (używam czystej instalacji programu HTMLPurifier) ​​

Na jakich elementach HTML używasz atrybutów szerokość/wysokość?

Zauważ, że nieprawidłowe atrybuty zostaną usunięte podczas używania xhtml strict. Szerokość i wysokość elementów img i table są dozwolone, o ile wiem, ale powinny być pisane małymi literami. Z wyjątkiem "width =" 100% "" na elemencie obrazu (dodano do uzupełnienia po rap-2-h jego komentarz).

Ogólnie: użyj białej listy do dodania dozwolonych atrybutów: addAttribute.

+0

'Zauważ, że nieprawidłowe atrybuty zostaną usunięte podczas używania xhtml strict' -> OK, dziękuję! Użyłem 'width =" 100% "' i nie jest poprawne. –

+0

"Ogólnie: użyj addAttribute zamiast białej listy, aby dodać dozwolone atrybuty." -> Wielkie dzięki! To jest to ! –

0

Wyłącz magiczne cytaty.

+0

Dlaczego? Nie rozumiem twojej odpowiedzi ... Czy możesz wyjaśnić coś więcej? –

+0

http://htmlpurifier.org/docs#toclink5 zobacz "moje atrybuty w tajemniczy sposób znikają" –

+0

Dzięki, nie wiedziałem o tym! Ale magiczne cytaty już są wyłączone. Moje pytanie brzmi: "Jak zezwolić na pojedynczy atrybut bez przedefiniowania całej białej listy" (lub czy jest to możliwe!). –

5

Znalazłem ten sam problem i jedynym rozwiązaniem było wklejenie w stylach białej listy do ustawień dodawania atrybutów HTML.

ustawienia białej listy są:

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

Dzięki. jest to [zaktualizowana lista] (http://htmlpurifier.org/live/smoketests/printDefinition.php) (w sekcji Elementy) –