Web 應用最常見的安全隱患來自於「不受信的輸入」。本文整理了一組可復用的靜態工具方法,涵蓋 HTML 標簽剝離、實體編碼/解碼 以及 批量處理 $_POST,幫助開發者在入口層統一攔截 XSS 風險。
<?php
class Tools
{
/**
* 安全輸出:默認剝離標簽並轉義實體
* @param string|array $string 輸入數據
* @param bool $html true 保留標簽僅轉義,false 剝離標簽後轉義
* @return string|array
*/
public static function safeOutput($string, $html = false)
{
if (!$html) {
$string = strip_tags($string);
}
return @self::htmlentitiesUTF8($string, ENT_QUOTES);
}
/**
* UTF-8 實體編碼(支持遞歸處理數組)
*/
public static function htmlentitiesUTF8($string, $type = ENT_QUOTES)
{
if (is_array($string)) {
return array_map([__CLASS__, 'htmlentitiesUTF8'], $string);
}
return htmlentities((string)$string, $type, 'utf-8');
}
/**
* UTF-8 實體解碼
*/
public static function htmlentitiesDecodeUTF8($string)
{
if (is_array($string)) {
return array_map([__CLASS__, 'htmlentitiesDecodeUTF8'], $string);
}
return html_entity_decode((string)$string, ENT_QUOTES, 'utf-8');
}
/**
* 批量處理 $_POST:對所有值執行實體編碼
* @return array 處理後的 $_POST
*/
public static function safePostVars()
{
if (!is_array($_POST)) {
return [];
}
$_POST = array_map([__CLASS__, 'htmlentitiesUTF8'], $_POST);
return $_POST;
}
}
?>
__construct 或中間件中調用 Tools::safePostVars(),實現全局自動防護。safeOutput($val);JS 變量用 json_encode;URL 參數用 urlencode;SQL 用預處理語句——不要混用。$html = true,配合 HTMLPurifier 白名單過濾,而非單純 strip_tags。htmlentities 在極端字符下的警告,生產環境建議配合錯誤日誌監控。HTMLPurifier 替換 strip_tags,獲得更完善的 XSS 防護。Content-Type: application/json 判斷,改用 json_decode(file_get_contents('php://input'), true) 獲取原始數據再過濾。filter_var 內置過濾器。統一的輸入過濾與上下文感知輸出,是構建安全 PHP 應用的基石。