首页 > 解决方案 > 如何在使用 HTMLPurifier 去除脚本标签时允许所有 CSS?

问题描述

有没有办法让HTMLPurifier允许所有 CSS 属性,所以我可以使用它来净化 HTML 问题(例如脚本标签)并保持视觉样式不变?

标签: phphtmlpurifier

解决方案


是的,如果$htmlPurifier对应于您的 HTMLPurifier 实例配置为使用 CSS 的默认设置(即不传递任何 CSS 配置选项),您可以在运行purify方法之前设置以下内容

$htmlPurifier->config->getCssDefinition()->info = new class implements \ArrayAccess {
    public function offsetSet($offset, $value) 
    {
    }

    public function offsetExists($offset) {
        return true;
    }

    public function offsetUnset($offset) 
    {
    }

    public function offsetGet($offset) {
        return new \HTMLPurifier_AttrDef_Text();
    }
}

这将覆盖 CSSDefinition.php 中设置的默认值,并在CSS.php中“欺骗”这一行以允许任何属性通过(使用 HTMLPurifier_AttrDef_Text 类似乎可以阻止它尝试进行任何进一步的验证)


推荐阅读