A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董事长 中级黑马   /  2016-11-20 15:50  /  1906 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用HTML Purifier解决XSS问题
博客分类:
•        php
HTMLPHPXMLXHTML
在php里解决XSS最简单的方法是使用htmlspecialchars转义xml实体,但对于需要使用xml的时候就搏手无策了。之前一直使用一个叫RemoveXSS的函数,该函数过滤得比较严格,很多html特性都过滤了,而且有bug,不修改代码使用起来很不友好,修改了却无法应对灵活的XSS攻击。

HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。。

一、使用HTML Purifier的要求
•        php 5+
•        iconv
•        bcmath
•        tidy
二、基本用法
默认下,使用UTF-8编码,和XHTML 1.0 Transitional文档类型.
Php代码     
1.        <?php   
2.        require_once 'library/HTMLPurifier.includes.php';   
3.          
4.        $dirty_html = <<<EOF   
5.        <h1>Hello   
6.        <script>alert("world");</script>   
7.        EOF;   
8.          
9.        $purifier = new HTMLPurifier();   
10.          
11.        $cleanHtml = $purifier->purify($dirty_html);  

输出:
Html代码     
1.        <h1>Hello   
2.        </h1>  

•        过滤了XSS代码,过滤规则:http://htmlpurifier.org/live/smoketests/xssAttacks.php
•        自动填充了残缺的标签
三、使用配置
配置主要用于设置规则,使用比较简单
Php代码     
1.        $config = HTMLPurifier_Config::createDefault();   
2.        // something....   
3.        $purifier = new HTMLPurifier($config);  

详细的配置规则:http://htmlpurifier.org/live/configdoc/plain.html

四、属性相关规则
1.id规则
默认下,HTML Purifier是不允许使用id的,可以通过Attr.EnableID选项来控制,当允许使用id的时候,有点需要注意,id只允许全局一个,后面重复的都会被去掉。
Php代码     
1.        $config->set('Attr.EnableID', true); // 允许使用id   
2.        $config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_   
3.        $config->set('Attr.IDBlacklist', array( // 设置黑名单,会过滤掉设置的id,如果设置了id前缀,要把前缀也加上   
4.            'test_black_list'  
5.        ));   
6.        $config->set('Attr.IDBlacklistRegexp', '/list_\d+/'); // 黑名单,使用正则匹配  


1 个回复

倒序浏览
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马