zoukankan      html  css  js  c++  java
  • 过滤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',

    最终效果:

     


    作者:0x584A
    链接:https://www.jianshu.com/p/bf8a816fde47
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    template(2.2)
    Filter过滤链条
    The 3n + 1 problem
    Struts2.3+Spring4.0
    康托展开
    templates(2.1)
    templates(1.2)
    templates(1.1)
    我和你
    Android 的上下文菜单: Context Menu
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8324317.html
Copyright © 2011-2022 走看看