2012-07-03 5 views
9

Ich benutze HTMLPurifier, um HTML-Zeichenfolge zu bereinigen (es geht um Sicherheit).HTMLPurifier: Wie man ein einzelnes Attribut zulässt, ohne die gesamte Whitelist neu zu definieren

Einige Attribute (wie width oder height) werden entfernt, wenn HTMLPurifier aufgerufen wird. Ich halte das nicht für ein Sicherheitsproblem.

Wie kann ich dieses Attribut hinzufügen, ohne die Whitelist neu zu definieren?

suchte ich auf Stackoverflow und HTMLPurifier Dokumentation, aber die einzige Lösung zu sein scheint:

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

Aber das ist keine Lösung, weil ich die weißen Liste neu zu definieren, nicht will (ich vertraue den Standard HTMLPurifier Konfiguration, ich möchte nur eine Ausnahme hinzufügen).

Antwort

3

Dieser Code:

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

?> 

erzeugt diese Ausgabe:

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

mit PHP 5.3.10 und HTMLPurifier Version 4.4.0. Daher werden diese Attribute nicht standardmäßig entfernt (ich verwende eine Neuinstallation von HTMLPurifier) ​​

Auf welchen HTML-Elementen verwenden Sie die width/height-Attribute?

Beachten Sie auch, dass ungültige Attribute entfernt werden, wenn xhtml strict verwendet wird. Breite und Höhe von IMG- und Tabellenelementen sind soweit ich weiß, sollten Kleinbuchstaben sein. Mit Ausnahme von "width = '100%'" auf einem Bildelement (zur Vervollständigung nach rap-2-h sein Kommentar hinzugefügt)

Allgemein: Verwenden Sie addAttribute anstelle der Whitelist, um erlaubte Attribute hinzuzufügen.

+0

'Beachten Sie auch, dass ungültige Attribute entfernt werden, wenn Sie xhtml strict verwenden -> Ok, danke! Ich habe 'width =" 100% "' verwendet und es ist nicht gültig. –

+0

"Im Allgemeinen: Verwenden Sie addAttribute anstelle der Whitelist, um erlaubte Attribute hinzuzufügen." -> Vielen Dank! Das ist es ! –

0

Schalten Sie magische Anführungszeichen ab.

+0

Warum? Ich verstehe deine Antwort nicht ... Kannst du etwas mehr erklären? –

+0

http://htmlpurifier.org/docs#toclink5 siehe "Meine Attribute verschwinden auf mysteriöse Weise" –

+0

Danke, das wusste ich nicht! Aber magische Zitate sind schon weg. Meine Frage ist "wie man ein einzelnes Attribut zulässt, ohne die ganze Whitelist neu zu definieren" (oder ist es möglich!) –

5

Ich fand das gleiche Problem und die einzige Lösung war Einfügen in die Whitelist-Stile in die HTML-Filter hinzufügen Attributeinstellungen.

Die Weiße Liste Einstellungen sind:

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

Danke. Dies ist eine [aktualisierte Liste] (http://htmlpurifier.org/live/smoketests/printDefinition.php) (im Bereich Elemente) –

Verwandte Themen