5

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

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

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

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

我应该如何更改 HTMLPurifier Allowed 标签?我想添加style,但我认为最好准确指定允许的样式,在这种情况下是margin-left. 在这种情况下,更改 HTML.Allowed 的正确方法是什么?

4

4 回答 4

18

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

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

PS 我很惊讶有多少人不了解 HTML Purifier 的工作原理。

于 2011-06-03T18:15:07.193 回答
1

就像 SamT 关于 IE7 中的 XSS 漏洞所说的那样,要警惕允许访问样式属性,因为微软的一项天才举措允许通过“表达式()”(也称为动态属性)在 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 属性。你永远不知道未来的另一个浏览器何时会获得加入微软所犯错误的天才想法。

于 2011-06-03T17:33:47.747 回答
1

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

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

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

于 2011-06-03T17:11:23.920 回答
1

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

于 2011-06-03T17:15:08.050 回答