使用HTML Purifier解决XSS问题
来源:互联网 发布:java webapi 编辑:程序博客网 时间:2024/05/10 17:12
在php里解决XSS最简单的方法是使用htmlspecialchars转义xml实体,但对于需要使用xml的时候就搏手无策了。之前一直使用一个叫RemoveXSS的函数,该函数过滤得比较严格,很多html特性都过滤了,而且有bug,不修改代码使用起来很不友好,修改了却无法应对灵活的XSS攻击。
HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。。
一、使用HTML Purifier的要求
默认下,使用UTF-8编码,和XHTML 1.0 Transitional文档类型.
输出:
配置主要用于设置规则,使用比较简单
详细的配置规则:http://htmlpurifier.org/live/configdoc/plain.html
四、属性相关规则
1.id规则
默认下,HTML Purifier是不允许使用id的,可以通过Attr.EnableID选项来控制,当允许使用id的时候,有点需要注意,id只允许全局一个,后面重复的都会被去掉。
输入:
输出:
2.class规则
默认下,是允许所有的class。属性Attr.AllowedClasses用于设置允许的class名,没被设置的class将被拒绝使用。而Attr.ForbiddenClasses则用于设置拒绝使用的class名。
输入:
输出:
参考资料:
http://htmlpurifier.org/live/INSTALL
HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。。
一、使用HTML Purifier的要求
- php 5+
- iconv
- bcmath
- tidy
默认下,使用UTF-8编码,和XHTML 1.0 Transitional文档类型.
- <?php
- require_once 'library/HTMLPurifier.includes.php';
- $dirty_html = <<<EOF
- <h1>Hello
- <script>alert("world");</script>
- EOF;
- $purifier = new HTMLPurifier();
- $cleanHtml = $purifier->purify($dirty_html);
输出:
- <h1>Hello
- </h1>
- 过滤了XSS代码,过滤规则:http://htmlpurifier.org/live/smoketests/xssAttacks.php
- 自动填充了残缺的标签
配置主要用于设置规则,使用比较简单
- $config = HTMLPurifier_Config::createDefault();
- // something....
- $purifier = new HTMLPurifier($config);
详细的配置规则:http://htmlpurifier.org/live/configdoc/plain.html
四、属性相关规则
1.id规则
默认下,HTML Purifier是不允许使用id的,可以通过Attr.EnableID选项来控制,当允许使用id的时候,有点需要注意,id只允许全局一个,后面重复的都会被去掉。
- $config->set('Attr.EnableID', true); // 允许使用id
- $config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_
- $config->set('Attr.IDBlacklist', array( // 设置黑名单,会过滤掉设置的id,如果设置了id前缀,要把前缀也加上
- 'test_black_list'
- ));
- $config->set('Attr.IDBlacklistRegexp', '/list_\d+/'); // 黑名单,使用正则匹配
输入:
- <a id="test_by_willko" href="aa">adf</a>
- <a id="black_list" href="aa">adf</a>
- <a id="black_list_2" href="aa">adf</a>
输出:
- <a id="test_by_willko" href="aa">adf</a>
- <a href="aa">adf</a>
- <a href="aa">adf</a>
2.class规则
默认下,是允许所有的class。属性Attr.AllowedClasses用于设置允许的class名,没被设置的class将被拒绝使用。而Attr.ForbiddenClasses则用于设置拒绝使用的class名。
- $config->set('Attr.AllowedClasses', array( // 设置允许使用的class名
- 'test_by_willko'
- ));
- $config->set('Attr.ForbiddenClasses', array( // 设置拒绝使用的class名
- 'ignore'
- ));
输入:
- <p class="test_by_willko">12345</p>
- <p class="ignore">78900</p>
输出:
- <p class="test_by_willko">12345</p>
- <p>78900</p>
参考资料:
http://htmlpurifier.org/live/INSTALL
http://htmlpurifier.org/docs
原文:http://willko.iteye.com/blog/475493
0 0
- 使用HTML Purifier解决XSS问题
- HTML Purifier --非常好用的XSS过滤器
- HTML Purifier --非常好用的XSS过滤器
- HTML Purifier 4.3.0
- HTML Purifier library for PHP
- 使用filter解决xss攻击
- xss问题
- HTML解决缓存问题
- HTML中可能使用为协议造成XSS 的属性
- webview使用实例,解决加载本地html代码乱码问题
- 能用HTML/CSS解决的问题就不要使用JS
- 能用HTML/CSS解决的问题就不要使用JS
- Python Django开发中XSS内容过滤问题的解决
- 解决CI框架因为开启XSS造成的乱码问题
- 通过修改EL表达式输出行为解决XSS问题
- 解决提交表单时Xss攻击的问题
- 使用enCode和deCode来解决xss的危害
- xss-html-filter
- #include<iostream>和#include<iostream.h>的区别
- Javascript 入门必读
- NOI2004郁闷的出纳员bzoj3503
- quick-cocos2d-x中Lua调用JAVA
- Python图示入门
- 使用HTML Purifier解决XSS问题
- 黑马程序员——集合——Set集合,增强for循环,数据结构,泛型,Collections集合工具类
- Android学习之基于显式的Intent的通讯
- 黑马程序员--Java基础学习(集合)第十六天
- Javascript 入门必读
- [BBS]搭建开源论坛之JForum富文本编辑器更换
- hdu 5419 线段树 or 差分前缀和
- LeetCode[97]::Interleaving String C++
- 让nginx支持thinkmcf或thinkphp rewrite模式