什么是HTMLPurifier?
在php里解决XSS最简单的方法是使用htmlspecialchars转义xml实体,但对于需要使用xml的时候就搏手无策了。
HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。。
官方下载地址:http://htmlpurifier.org/download
默认使用方法
<?phprequire_once 'library/HTMLPurifier.includes.php'; // 载入核心文件// XSS代码$dirty_html = <<<EOF <h1>Hello <script>alert("world");</script> EOF; // 实例化 HTMLPurifier对象$purifier = new HTMLPurifier(); // 返回过滤后的数据$cleanHtml = $purifier->purify($dirty_html); ?>
详细过滤参看官方说明:http://htmlpurifier.org/live/smoketests/xssAttacks.php
在ThinkPHP中的使用
ThinkPHP核心配置文件中使用的是: ‘DEFAULT_FILTER’ => ‘htmlspecialchars’, // 默认参数过滤方法 用于I函数…
虽然也很有效的过滤了很有恶意的SQL注入,但未过滤“’”这个单引号,设置不妥当仍然会造成SQL注入。官方也给出了回应:I函数的作用不能等同于防止SQL注入,可以自定义函数来过滤
那么我们就可以使用HTMLPurifier了。
首先自定义一个函数:
function removeXSS($val){ static $obj = null; if ($obj === null) { // 载入核心文件 require_once ("/Public/HTMLPurifier/HTMLPurifier.includes.php"); $obj = new HTMLPurifier(); } // 返回过滤后的数据 return $obj->purify($val); }
并在配置文件中改变默认过滤参数:
‘DEFAULT_FILTER’ => ‘removeXSS’,
最终效果:
原文始发于微信公众号(一个人的安全笔记):过滤XSS的HTMLPurifier使用
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论