Php 修改htmlpurifier允许此标记的标记

Php 修改htmlpurifier允许此标记的标记,php,xss,htmlpurifier,Php,Xss,Htmlpurifier,我的html净化器设置现在只允许这些标签 $configuration->set('HTML.Allowed', 'p,ul,ol,li'); 我想允许列表缩进,我的编辑器使用这个html <ul style="margin-left: 40px;"> 我应该如何更改HTMLPurifier允许的标记?我想添加样式,但我认为最好确切地指定允许的样式,在本例中为左边距。更改HTML的正确方法是什么?这种情况下允许吗?至少,您希望允许净化器支持的标签的属性,如下所示: $c

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

$configuration->set('HTML.Allowed', 'p,ul,ol,li');
我想允许列表缩进,我的编辑器使用这个html

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

我应该如何更改HTMLPurifier允许的标记?我想添加
样式
,但我认为最好确切地指定允许的样式,在本例中为
左边距
。更改HTML的正确方法是什么?这种情况下允许吗?

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

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

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

我建议您根本不允许属性。允许style属性会导致IE7(可能还有其他版本,我目前不确定)中出现XSS漏洞,但关键是,这太危险了。您应该自己解析HTML,并在代码中用常量字符串替换用户的字符串。允许HTML是一种非常危险的做法。为了获得更好的安全性,您可能希望尝试markdown之类的方法,或者创建自己的非常简单的标记类型语言(如BBcode),供用户使用

就像SamT所说的IE7中的XSS漏洞一样,要小心允许访问style属性,因为genius Microsoft允许通过“expression()”(也称为动态属性)在CSS中使用javascript。

关于在IE8中删除它,微软公开承认它让用户暴露于其他漏洞:

例如:

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

以上内容将在MSIE 5到MSIE 7中弹出一个javascript警报框。根据MSDN上的文档,当Quirks模式处于活动状态时,它也应该在IE8上工作。 它也可能发生在IE9的怪癖模式,但我不能肯定


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

允许样式属性,然后使用修改允许的CSS属性

$configuration->set('HTML.Allowed','p,ul[style],ol,li'); $configuration->set('CSS.AllowedProperties','marginleft');
另外,我很惊讶有这么多人不理解HTML净化器是如何工作的。

Htmlpurifier在样式属性中阻止XSS。@弗兰克·法默,我认为他的观点是正确的。另请参阅“黑曜石注释。我还不清楚HTMLPurifier是否会处理样式内部的内容,因此他们可能有一个观点。我希望有人能澄清他们是否知道这方面的任何测试结果。@samold:请参阅Edward对黑曜石的回复。Edward是HTML净化器的作者。“HTML净化器分解HTML的所有组件,包括所有CSS“但只做
ul[style]
是安全的,我的意思是,恶意用户可能会在
ul[style]
中添加代码,或者
ul[style]
被广泛认为是足够的HTML净化器分解HTML的所有组件,包括所有CSS。您可以在这里看到它是如何处理CSS的:(向下滚动至底部)我没有意识到这一点;我自己从来没有使用过HTML净化器,因为当我编写代码并允许使用HTML时,似乎每个15岁的孩子都会突然认为现在是开始探索XSS漏洞的开放季节。仅仅是一个vuln的出现似乎就让他们陷入了疯狂的进食……真的是一件非常烦人的事。:\n您应该将允许的属性列为白名单,在此处查看将JavaScript注入样式属性的一些可能性:@Edward Z.Yang,该库非常好,但我发现的文档有点快,我希望有更多的示例。例如,仅通过阅读本文,我想很难猜到如何使用它。您的两行文字可能更适合那个页面?文档非常糟糕。这就是为什么人们不理解它。 $configuration->set('HTML.Allowed', 'p,ul[style],ol,li'); $configuration->set('CSS.AllowedProperties', 'margin-left');