什么是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編輯器的福音。。
默認使用方法
<?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',
最終效果:
