【问题标题】:How to exempt a tag from HTMLpurifier?如何从 HTMLpurifier 中免除标签?
【发布时间】:2020-10-07 17:56:48
【问题描述】:

我目前正在使用 HTMLPurifier 运行一些代码。但是,我们希望保留一种标签类型。

我查看了问题和文档,但未能找到明确的答案...如何从 HTMLPurifier 中免除特定标签?

我正在寻找类似...的东西

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', $HTML_Allowed);
$config->set('ExemptHTML', "img,form,pre");

【问题讨论】:

  • 我认为 HTML Purifier 不可能实现您的要求,因为它的整个前提是它将所有 HTML 分开,根据它所知道的进行分析,然后基于 HTML 重构关于它所知道的。您可以教它知道 specific 属性(甚至是 specific 非标准标签及其属性),但据我所知,没有办法告诉它“接受此标签上所有可能值的所有属性”。
  • 有可能你甚至不会真的想要那个 - 例如。 onclick 几乎肯定不是您希望在 <img> 标签上允许的属性! (虽然如果是,HTML Purifier 可能不是您正在做的事情的正确工具?这有点难以猜测。)您能再解释一下您的用例吗? :)
  • 实际上,我正在清理 XSS,但是还有其他代码正在运行,可以验证其他地方的脚本标签。我不是删除脚本标签,而是验证那些是有效的,所以我不需要HTMLPurifier来捕获XSS,如果它只是在一个脚本标签。不过,这不是触发 XSS 的唯一方法,只是最简单的方法。

标签: php htmlpurifier


【解决方案1】:

这有点 hacky,但事实证明,您可以编写一个类,在父级上使用 _tagname 扩展特定模式并注册它,然后创建一个为您的 passthrough 量身定制的新验证器(最终切换到针对更多的原子控制,但它应该适用于任何一个,假设)。

if (!class_exists("HTMLPurifier_[something]scheme_[mytag]")){
    class HTMLPurifier_[something]Scheme_[mytag] extends HTMLPurifier_[something]Scheme{
        function __construct()
        {
            $this->[required_variable_for_passing_its_category] = true;
        }
        public function doValidate(&$uri, $config, $context) {
            return true;
            // Or, alternatively, you could actually do some validation here.
        }
    }
    HTMLPurifier_[something]SchemeRegistry::instance()->register(new HTMLPurifier_[something]Scheme_[mytag](), $config);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多