首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP htmlspecialchars、strip_tags、addslashes 深度解析:安全過濾函數選型指南

     編輯:PHP 綜合知識

PHP 提供多種字串過濾函數,但開發者常混淆其用途、邊界與安全性。本文深度解析 htmlspecialchars、strip_tags、htmlentities、addslashes/stripslashes 的核心差異、適用場景、安全陷阱與最佳實踐組合。

一、四大核心函數對照表

函數核心功能處理範圍典型用途安全等級
htmlspecialchars特殊字元 → HTML 實體4 個字元 (& " < >)HTML 輸出編碼 (XSS 防禦核心)⭐⭐⭐⭐⭐
htmlentities所有字元 → HTML 實體所有非 ASCII 字元完整實體化、郵件模板⭐⭐⭐⭐
strip_tags移除 HTML/PHP 標籤標籤結構內容摘要、純文本輸出⭐⭐ (不可信輸入慎用)
addslashes引號/反斜線/NULL 加反斜線' " \ NUL舊式 SQL 轉義 (已棄用)⭐ (不安全)

二、htmlspecialchars — XSS 防禦第一道防線

轉換對照

& (和號)  → &amp;
" (雙引號) → &quot;
< (小於)   → &lt;
> (大於)   → &gt;

關鍵參數

htmlspecialchars($string, $flags = ENT_QUOTES | ENT_SUBSTITUTE, $encoding = 'UTF-8', $double_encode = true)
  • ENT_QUOTES:同時轉換單雙引號 (預設僅雙引號) 必須加上
  • ENT_SUBSTITUTE:無效編碼替換為 Unicode 替換字元 (而非返回空字串)
  • $encoding:必須顯式指定 'UTF-8' (或實際編碼)
  • $double_encode:預設 true,已轉義實體不再重複轉義

標準安全輸出模式

function h($str) {
    return htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

// 使用
echo "
" . h($userInput) . "
"; echo ""; // 單引號屬性也安全

三、strip_tags — 移除標籤但殘留風險

行為

  • 移除 <tag>、</tag>、<?php ... ?>、<% ... %>
  • 保留標籤內的文字內容
  • 第二參數:允許保留的標籤 strip_tags($str, '


    ')

⚠️ 安全陷阱

$input = '';
echo strip_tags($input); // 輸出: 空字串 (標籤被移除)

// 但若允許某些標籤:
echo strip_tags($input, ''); 
// 輸出:  — XSS 依然生效!
結論: strip_tags 不能防禦 XSS,僅適合「完全受信內容」的純文本提取。不可信輸入必須配合 htmlspecialchars。

四、htmlentities — 全字元實體化

差異

$str = "中文 & 特殊 
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved