修改htmlpurifier允许此标记的标记

时间:2011-06-03 17:07:28

标签: php xss htmlpurifier

我的html净化器设置现在只允许这些标签

$configuration->set('HTML.Allowed', 'p,ul,ol,li');

我想允许缩进列表,我的编辑器使用这个html

<ul style="margin-left: 40px;">

我应该如何更改HTMLPurifier Allowed标签?我想添加style,但我认为最好准确指定允许的样式,在本例中为margin-left。更改HTML的正确方法是什么?适用于此情况?

4 个答案:

答案 0 :(得分:18)

允许样式属性,然后使用%CSS.AllowedProperties修改允许的CSS属性。

$configuration->set('HTML.Allowed', 'p,ul[style],ol,li');
$configuration->set('CSS.AllowedProperties', 'margin-left');

P.S。我很惊讶有多少人不理解HTML Purifier的工作原理。

答案 1 :(得分:1)

至少,您希望允许净化器支持的标记属性,如下所示:

$configuration->set('HTML.Allowed', 'p,ul[style],ol,li');

我不确定你是否也可以允许/限制属性的内容。

答案 2 :(得分:1)

我建议你根本不允许属性。允许样式属性会导致IE7中的XSS漏洞(可能还有其他版本,目前我不确定)但重点是,它太危险了。您应该自己解析HTML,并在代码中用常量字符串替换用户。允许HTML是一种非常危险的做法。为了更好的安全性,您可能需要尝试降价或创建自己非常简单的标记类型语言(如BBcode)供用户使用。

答案 3 :(得分:1)

就像SamT所说的关于IE7中的XSS漏洞一样,要小心允许访问style属性,因为微软的一个天才允许通过“expression()”(也称为动态属性)在CSS中使用javascript )。 http://msdn.microsoft.com/en-us/library/ms537634(v=vs.85).aspx

关于在IE8中的删除,微软公然承认它暴露了用户的其他漏洞: http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx

示例:

<a href="" style="width: expression(alert('XSS'));">blah</a>

上面会在MSIE 5到7中弹出一个javascript警告框。根据MSDN上的文档,当Quirks模式处于活动状态时,它也适用于IE8。 在怪癖模式下它也可能出现在IE9上,但我无法确定。

如果可能,请避免允许访问style属性。你永远不知道另一个未来的浏览器什么时候会让天才的想法加入微软所犯的同样错误。