HTML Purifier

HTML Purifier

前言:最近因公司项目需要做 HTML 标签过滤,同事推荐了 HTML Purifier 。
使用过程中虽然因为英文太差(英文文档,网上相关博客比较少)的原因浪费了很多时间,但完成配置设置之后的使用过程还是比较方便的。
因此在此写下经理的过程以作记录,也说不定能帮助到别人

HTML Purifier 简介

HTML Purifier 是一个用 PHP 编写的标准、兼容的 HTML 过滤器,支持自定义标签、属性、过滤规则。
可以有效的防止 XSS 攻击!
HTML Purifier 的作者 Edward Z. Yang经历好像蛮丰富的,可以我英文太差,只看明白了几个学校。。。
HTML Purifier 的 package 包在 Packagist 上有 680 多万的下载使用,能看出来有多常用
img

HTML Purifier 使用

要求:HTML Purifier 只需要 PHP 5.2 以及以上版本,并且不需要其他核心组件的支持。
如果是 composer 项目,那么只需要通过 composer 安装和自动加载 ezyang/htmlpurifier 就可以使用了,如果项目中没有 composer ,那可以下载standalone版本,并通过require_once引入。

基本使用
require_once(dirname(__FILE__) . '/HTMLPurifier.standalone.php');
$config   = HTMLPurifier_Config::createDefault();
$html_purifier = new HTMLPurifier($config);
$clean_html = $html_purifier->purify($dirty_html);

说明:引入文件->获取默认配置->实例化->过滤
基础使用不需要任何配置,直接调用 HTML Purifier 就可以过滤

常规配置

HTML Purifier 的使用重点还在于如何进行配置,当需要的时候可以通过 set 方法进行配置

$config->set('config_object', value, a=null);

第一个参数就是需要配置的属性名称,第二个参数就是属性的值。第三个不知道。。。先不管它
配置属性可以通过官网查询 http://htmlpurifier.org/live/configdoc/plain.html
HTML Purifier 使用了白名单过滤机制,只有被设置允许的才会通过检验。
- 过滤掉文本中的所有html标签

/**
 * 过滤掉所有html标签很简单,因为白名单机制
 */
$config->set('HTML.Allowed', '');
  • 只允许图片标签 img 及其链接和描述

    $config->set(‘HTML.Allowed’, ‘img[src|alt]’);

自定义标签和属性

HTML Purifier 遵循 HTML 标准,会保留常见的各种HTML标签和合法的HTML定义的标准属性,其他的标签的属性都会被过滤掉!
一般来说就可以满足需求,但总用不够用的时候。这时候就需要来自定义 HTML Purifier 的标签和属性了。
我就遇到了这样的问题,一些标签和属性不符合标准或者不被推荐使用了,如果必须要使用,只能自定义才能避免被过滤。

    // 默认配置
    $config = HTMLPurifier_Config::createDefault();

    //设置配置的名称
    $config->set('HTML.DefinitionID', 'smzdm library version');
    //设置配置的版本
    $config->set('HTML.DefinitionRev', 1);
    // 清理配置缓存,上线时关掉这句
    $config->set('Cache.DefinitionImpl', null);

    $def = $config->getHTMLDefinition(true);
    // 允许 audio 标签
    $def->addElement(
        'audio',
        'Block',
        'Flow',
        'Common',
        [
            'data-id' => 'Number'
        ]
    );
    // 为 img 标签添加 data-weight 属性
    $def->addAttribute(
        'img',
        'data-weight',
        'Number'
    );

    $this->html_purifier = new HTMLPurifier($config);

这里多了3个set操作,配置的名称和版本会作为配置的缓存key,最终这份配置会被缓存到磁盘到一个文件里。但是如果先执行过一次生成了缓存,而后再次执行时修改了配置,这个缓存是不会更新的,因此上面的第三个set就是清理缓存的用途,上线时就不要保留了,只是在调试htmlpurifier 时保障每次配置都可以得到更新而已。
下面的两个地方分别定义了一个 audio 标签和 为 img 标签添加的新属性
如果有比较多的配置、标签、属性需要进行设置的也可以自己封装一个方法来设置。

更多的配置请参考官方文档

参考链接:
HTMLPurifier使用教程
为htmlpurifier订制xss过滤

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值