萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP Filter 擴展完整指南:資料驗證與清理的安全防線

為什麼需要 Filter?

所有 Web 應用程式都依賴外部輸入:表單資料、Cookie、Web Service 回傳、伺服器變數、資料庫查詢結果等。輸入過濾是應用程式安全的第一道防線。PHP Filter 擴展提供標準化、高效能的資料驗證與清理函數,避免手寫正則表達式導致的漏洞與不一致。

核心函數速覽

函數用途
filter_var()驗證/清理單一變數
filter_var_array()批次處理多個變數,可套用不同過濾器
filter_input()取得並過濾單一輸入來源(GET/POST/COOKIE 等)
filter_input_array()批次取得並過濾多個輸入來源

驗證過濾器 vs 清理過濾器

  • 驗證過濾器:嚴格格式檢查(如 Email、URL、IP、整數範圍),通過回傳值,失敗回傳 false。
  • 清理過濾器:移除或編碼不安全字元(如 HTML 標籤、特殊字元),永遠回傳字串,不判斷格式正確性。

實戰範例:整數範圍驗證

<?php
$var = 300;
$options = [
    'options' => ['min_range' => 0, 'max_range' => 256]
];
if (!filter_var($var, FILTER_VALIDATE_INT, $options)) {
    echo "整數無效(超出 0-256 範圍)";
} else {
    echo "整數有效";
}
?>

表單輸入驗證與清理

驗證 Email(GET)

<?php
if (!filter_has_var(INPUT_GET, 'email')) {
    echo "缺少 email 參數";
} elseif (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL)) {
    echo "Email 格式錯誤";
} else {
    echo "Email 格式正確";
}
?>

清理 URL(POST)

<?php
if (!filter_has_var(INPUT_POST, 'url')) {
    echo "缺少 url 參數";
} else {
    $url = filter_input(INPUT_POST, 'url', FILTER_SANITIZE_URL);
    // 移除非法字元,如 "https://www.exam ple.com/" → "https://www.example.com/"
}
?>

批次處理多欄位表單

<?php
$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_GET, $filters);

if (!$result['age']) {
    echo "年齡必須為 1-120 之間的整數";
} elseif (!$result['email']) {
    echo "Email 格式錯誤";
} else {
    echo "所有輸入通過驗證";
}
?>

進階:回呼過濾器

使用 FILTER_CALLBACK 整合自訂函數,擁有完全控制權:

<?php
function convertSpace($string) {
    return str_replace('_', ' ', $string);
}

$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, ['options' => 'convertSpace']);
// 輸出:Peter is a great guy!
?>

常用過濾器常數速查

  • FILTER_VALIDATE_EMAIL、FILTER_VALIDATE_URL、FILTER_VALIDATE_IP、FILTER_VALIDATE_INT、FILTER_VALIDATE_BOOLEAN
  • FILTER_SANITIZE_STRING、FILTER_SANITIZE_EMAIL、FILTER_SANITIZE_URL、FILTER_SANITIZE_NUMBER_INT、FILTER_SANITIZE_SPECIAL_CHARS

安全建議

  1. 永遠過濾所有外部輸入,即使看似可信來源。
  2. 優先使用驗證過濾器,確保資料符合預期格式。
  3. 輸出至 HTML 前,搭配 htmlspecialchars() 或 FILTER_SANITIZE_SPECIAL_CHARS 防禦 XSS。
  4. 資料庫操作使用參數化查詢,而非依賴過濾器防禦 SQL Injection。

PHP Filter 擴展是內建、無需額外安裝的安全工具箱,善用它能大幅降低輸入驗證的開發成本與安全風險。

copyright © 萬盛學電腦網 all rights reserved