2012-07-03 10 views
9

Sto usando HTMLPurifier per disinfettare la stringa HTML (riguarda la sicurezza).HTMLPurifier: come consentire un singolo attributo senza ridefinire l'intera lista bianca

Alcuni attributi (come width o height) vengono rimossi quando viene chiamato HTMLPurifier. Non lo considero un problema di sicurezza.

Come posso aggiungere questo attributo senza ridefinire la whitelist?

Ho cercato su StackOverflow e HTMLPurifier documentazione, ma l'unica soluzione sembra essere:

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

Ma questa non è una soluzione, perché non voglio ridefinire whitelist (mi fido di default HTMLPurifier configurazione, voglio solo aggiungere un'eccezione).

risposta

3

Questo codice:

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

?> 

produce questo risultato:

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

utilizzando PHP 5.3.10 e HTMLPurifier versione 4.4.0. Quindi questi attributi non sono spogliati di default (sto usando un'installazione pulita di HTMLPurifier) ​​

Su quali elementi HTML stai utilizzando gli attributi larghezza/altezza?

Inoltre, gli attributi non validi verranno eliminati quando si utilizza xhtml strict. Larghezza e altezza su img e gli elementi della tabella sono consentiti per quanto ne so, ma dovrebbero essere in minuscolo. Tranne "width = '100%'" su un elemento immagine (aggiunto per completezza dopo rap-2-h il suo commento)

In generale: utilizzare addAttribute anziché la whitelist per aggiungere attributi consentiti.

+0

'Inoltre, gli attributi non validi verranno eliminati quando si utilizza xhtml strict' -> Ok, grazie! Ho usato 'width =" 100% "' e non è valido. –

+0

"In generale: utilizzare addAttribute anziché la whitelist per aggiungere attributi consentiti." -> Grazie mille! Questo è tutto ! –

0

Disattiva citazioni magiche.

+0

Perché? Non capisco la tua risposta ... Puoi spiegarci ancora? –

+0

http://htmlpurifier.org/docs#toclink5 vedere "i miei attributi stanno scomparendo misteriosamente" –

+0

Grazie, non lo sapevo! Ma le citazioni magiche sono già disattivate. La mia domanda è "Come consentire un singolo attributo senza ridefinire l'intera whitelist" (o è possibile!) –

5

Ho trovato lo stesso problema e l'unica soluzione era incollare negli stili di whitelist nelle impostazioni di attributo di purificatore HTML.

Le impostazioni whitelist sono:

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

Grazie. questa è una [lista aggiornata] (http://htmlpurifier.org/live/smoketests/printDefinition.php) (nella sezione Elementi) –