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

PHP Filter 過濾器完整指南:資料驗證與淨化的標準化實作

     編輯:PHP 綜合知識

核心概念:為什麼需要過濾器?

所有外部輸入(表單、Cookie、Server 變數、資料庫結果)皆屬不可信來源。PHP Filter 擴展提供標準化、可複用的驗證與淨化函式,是應用程式安全的第一道防線。

兩大過濾器類型

類型用途回傳值常見常數
Validating(驗證) 檢查格式是否符合預期(Email、URL、IP、Int、Boolean) 成功回傳對應型別值,失敗回傳 false FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_INT, FILTER_VALIDATE_URL
Sanitizing(淨化) 移除或編碼不安全字元,不檢查格式 永遠回傳字串 FILTER_SANITIZE_STRING, FILTER_SANITIZE_EMAIL, FILTER_SANITIZE_URL

核心函式速查

  • filter_var($var, $filter, $options):單一變數過濾
  • filter_var_array($data, $filters):批次處理陣列
  • filter_input($type, $name, $filter, $options):取得並過濾單一輸入(GET/POST/COOKIE/SERVER/ENV)
  • filter_input_array($type, $filters):批次取得並過濾輸入
  • filter_has_var($type, $name):檢查輸入是否存在

實戰範例

整數範圍驗證

$age = 300;
$options = ['options' => ['min_range' => 1, 'max_range' => 120]];
if (filter_var($age, FILTER_VALIDATE_INT, $options) === false) {
    echo "年齡必須在 1-120 之間";
}

Email 驗證與淨化

$email = "  User@Example.COM  ";
$clean = filter_var($email, FILTER_SANITIZE_EMAIL); // 移除空白、非法字元
if (filter_var($clean, FILTER_VALIDATE_EMAIL)) {
    echo "有效 Email:$clean";
}

批次處理表單輸入

$filters = [
    'name'  => ['filter' => FILTER_SANITIZE_STRING],
    'age'   => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 120]],
    'email' => FILTER_VALIDATE_EMAIL,
];
$result = filter_input_array(INPUT_POST, $filters);

if ($result['age'] === false)  echo "年齡格式錯誤
"; if ($result['email'] === false) echo "Email 格式錯誤
"; if ($result['age'] && $result['email']) echo "資料通過驗證";

自訂回呼過濾器

function toTitleCase($str) {
    return ucwords(strtolower($str));
}
$raw = "jOhN dOe";
$clean = filter_var($raw, FILTER_CALLBACK, ['options' => 'toTitleCase']);
// 結果:John Doe

選項與旗標

  • 選項:以關聯陣列 ['options' => [...]] 傳遞,如 min_range, max_range, default, regexp。
  • 旗標:直接位元或操作,如 FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_NO_ENCODE_QUOTES。

最佳實務原則

  1. 永遠過濾外部輸入:不要信任 $_GET, $_POST, $_COOKIE, $_SERVER。
  2. 白名單優於黑名單:用 FILTER_VALIDATE_* 確認格式,而非嘗試過濾已知惡意字串。
  3. 輸出時再編碼:Filter 解決輸入端,HTML 輸出仍需 htmlspecialchars(),SQL 需參數化查詢。
  4. 集中管理規則:將過濾規則陣列集中定義,便於維護與審計。

常見誤區

  • 誤以為 FILTER_SANITIZE_STRING 能防 XSS —— 它只移除標籤,屬性、事件處理器可能殘留,輸出端仍需 htmlspecialchars()。
  • FILTER_VALIDATE_URL 不支援國際化域名(IDN),需自行轉碼或用正則補充。
  • filter_input 若輸入不存在回傳 null,驗證失敗回傳 false,三態需嚴格判斷(===)。

善用 Filter 擴展,能大幅減少手寫正則與驗證邏輯,提升程式碼可讀性與安全基線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved