所有 Web 應用程式都依賴外部輸入:表單資料、Cookie、Web Service 回傳、伺服器變數、資料庫查詢結果等。輸入過濾是應用程式安全的第一道防線。PHP Filter 擴展提供標準化、高效能的資料驗證與清理函數,避免手寫正則表達式導致的漏洞與不一致。
| 函數 | 用途 |
|---|---|
filter_var() | 驗證/清理單一變數 |
filter_var_array() | 批次處理多個變數,可套用不同過濾器 |
filter_input() | 取得並過濾單一輸入來源(GET/POST/COOKIE 等) |
filter_input_array() | 批次取得並過濾多個輸入來源 |
false。<?php
$var = 300;
$options = [
'options' => ['min_range' => 0, 'max_range' => 256]
];
if (!filter_var($var, FILTER_VALIDATE_INT, $options)) {
echo "整數無效(超出 0-256 範圍)";
} else {
echo "整數有效";
}
?>
<?php
if (!filter_has_var(INPUT_GET, 'email')) {
echo "缺少 email 參數";
} elseif (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL)) {
echo "Email 格式錯誤";
} else {
echo "Email 格式正確";
}
?>
<?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_BOOLEANFILTER_SANITIZE_STRING、FILTER_SANITIZE_EMAIL、FILTER_SANITIZE_URL、FILTER_SANITIZE_NUMBER_INT、FILTER_SANITIZE_SPECIAL_CHARShtmlspecialchars() 或 FILTER_SANITIZE_SPECIAL_CHARS 防禦 XSS。PHP Filter 擴展是內建、無需額外安裝的安全工具箱,善用它能大幅降低輸入驗證的開發成本與安全風險。