過濾XSS的HTMLPurifier使用

什么是HTMLPurifier?

在php里解決XSS最簡單的方法是使用htmlspecialchars轉(zhuǎn)義xml實體,但對于需要使用xml的時候就搏手無策了。

HTML Purifier是基于php 5所編寫的HTML過濾器,支持自定義過濾規(guī)則,還可以把不標(biāo)準(zhǔn)的HTML轉(zhuǎn)換為標(biāo)準(zhǔn)的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(); 

// 返回過濾后的數(shù)據(jù)
$cleanHtml = $purifier->purify($dirty_html);  
?>

詳細過濾參看官方說明:http://htmlpurifier.org/live/smoketests/xssAttacks.php

在ThinkPHP中的使用

ThinkPHP核心配置文件中使用的是: 'DEFAULT_FILTER' => 'htmlspecialchars', // 默認參數(shù)過濾方法 用于I函數(shù)...

雖然也很有效的過濾了很有惡意的SQL注入,但未過濾“'”這個單引號,設(shè)置不妥當(dāng)仍然會造成SQL注入。官方也給出了回應(yīng):I函數(shù)的作用不能等同于防止SQL注入,可以自定義函數(shù)來過濾

那么我們就可以使用HTMLPurifier了。

首先自定義一個函數(shù):

    function removeXSS($val){
        static $obj = null;
        if ($obj === null) {
            // 載入核心文件
            require_once ("/Public/HTMLPurifier/HTMLPurifier.includes.php");
            $obj = new HTMLPurifier();
        }
 
        // 返回過濾后的數(shù)據(jù)
        return $obj->purify($val);
    }

并在配置文件中改變默認過濾參數(shù):

'DEFAULT_FILTER' => 'removeXSS',

最終效果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,007評論 25 709
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,482評論 0 16
  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息,讓PHP新手誤入歧途,傳播著錯誤的實踐和糟糕的代碼,這必須得到糾正...
    layjoy閱讀 21,842評論 7 118
  • 有顆牙不舒服很久了,但是我作為一個重度看病拖延癥的患者,并沒有當(dāng)回事。直到有同事告訴我,曙光醫(yī)院有個帥的發(fā)光的男醫(yī)...
    Isabella_s閱讀 337評論 0 0
  • 一、Redis的持久化 Redis 提供了不同級別的持久化方式:RDB持久化方式能夠在指定的時間間隔能對你的數(shù)據(jù)進...
    會跳舞的機器人閱讀 469評論 0 1

友情鏈接更多精彩內(nèi)容