过滤XSS的HTMLPurifier使用

什么是HTMLPurifier?

在php里解决XSS最简单的方法是使用htmlspecialchars转义xml实体,但对于需要使用xml的时候就搏手无策了。

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

官方下载地址:http://htmlpurifier.org/download

默认使用方法

<?php
require_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',

最终效果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,705评论 25 709
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,447评论 0 16
  • Welcome 目前网络上充斥着大量的陈旧信息,让PHP新手误入歧途,传播着错误的实践和糟糕的代码,这必须得到纠正...
    layjoy阅读 21,824评论 7 118
  • 有颗牙不舒服很久了,但是我作为一个重度看病拖延症的患者,并没有当回事。直到有同事告诉我,曙光医院有个帅的发光的男医...
    Isabella_s阅读 330评论 0 0
  • 一、Redis的持久化 Redis 提供了不同级别的持久化方式:RDB持久化方式能够在指定的时间间隔能对你的数据进...
    会跳舞的机器人阅读 454评论 0 1

友情链接更多精彩内容