使用HTMLpurifier,如何将一对属性添加到默认白名单,例如的 'onClick'

时间:2012-05-02 02:11:01

标签: htmlpurifier

两个问题:

我一直在阅读文档和SO帖子......并且知道如何做很长的事情(自己定义每个元素和属性),但我想要做的就是在默认白名单中添加2或3个属性。因此,我不必经常查找并添加更多元素/属性,例如HTML.AllowedElements和/或HTML.AllowedAttributes

具体来说,现在,(对于内部可信用户)我需要允许javascript属性(从tinymce输入)。问题#1。有没有办法只添加一个属性(到什么是HTMLpurifier允许),而不会导致整个默认的允许元素/属性集被有效地消灭(由仅覆盖明确的是什么写在HTML.AllowedElementsHTML.AllowedAttributes)?

对于我现在需要的 (javascript属性),当我在这个帖子中看到时,我很兴奋:

Whitelist Forms in HTML Purifier Configuration

...... Edward Z. Yang说,“...... [$config->set('HTML.Trusted', true);]允许使用JavaScript。”

...但即使设置了这个:$config->set('HTML.Trusted', true);,HTMLpurifier 4.4.0仍在剥离,例如任何输入onclick="dostuff();"属性。为什么?问题#2。)是否有一种快速方法可以将javascript属性添加到允许列表中?

2 个答案:

答案 0 :(得分:1)

  1. 由于HTML Purifier不知道该属性,并且当您打开%HTML时,HTML Purifier通过了所有内容,因此您正在失去onclick.Trusted您可能根本就不使用HTML Purifier。< / p>

  2. HTML Purifier只有这种情况的属性集合; “共同”可能是将它们插入的正确选择。

  3. 但是......为什么? %HTML.Trusted的真实名称应该是%HTML.UnsafeMakeMyApplicationVulnerable

答案 1 :(得分:0)

HTMLPurifier不支持onClick和类似的java脚本相关属性作为默认行为的任何HTML元素。因此,如果您希望以任何方式允许此类属性,您可以通过以下方式将此类属性添加到特定元素。

$config = HTMLPurifier_Config::createDefault();
$def = $config->maybeGetRawHTMLDefinition()
$def->addAttribute('a', 'onclick', 'Text');

但要小心,这可能会导致xss攻击,因为您允许任何java脚本代码存在于该属性中。