HTMLPurifier:如何在不重新定义整个白名单的情况下允许单个属性

时间:2012-07-03 10:13:01

标签: php html security sanitization htmlpurifier

我正在使用HTMLPurifier来清理HTML字符串(这是关于安全性的。)

调用HTMLPurifier时会删除某些属性(如widthheight)。我不认为这是一个安全问题。

如何在不重新定义白名单的情况下添加此属性?

我搜索了Stackoverflow和HTMLPurifier文档,但唯一的解决方案似乎是:

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

但这不是解决方案,因为我不想重新定义白名单(我相信默认的HTMLPurifier配置,我只想添加一个例外)。

3 个答案:

答案 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

答案 1 :(得分:3)

此代码:

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

?>

生成此输出:

<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。因此,默认情况下不会剥离这些属性(我使用的是HTMLPurifier的干净安装)

您在哪些HTML元素上使用width / height属性?

另请注意,使用xhtml strict时将删除无效属性。据我所知,img和table元素的宽度和高度是允许的,但应该是小写的。除了图像元素上的“width ='100%'”(在rap-2-h评论后添加完整性)

通常:使用addAttribute代替白名单来添加允许的属性。

答案 2 :(得分:0)

关掉魔法引号。