直接使用 $_GET、$_POST、$_REQUEST 存在安全隱患(XSS、SQL 注入風險)。封裝一個通用函數,統一進行存在性檢查與輸出轉義,是基礎防護的第一步。
<?php
function cleanGlobal($key, $source = 'GPC', $default = '', $htmlEscape = true) {
$sources = array('G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'R' => '_REQUEST');
$source = strtoupper($source);
foreach (str_split($source) as $char) {
if (isset($sources[$char]) && isset($GLOBALS[$sources[$char]][$key])) {
$value = $GLOBALS[$sources[$char]][$key];
return $htmlEscape ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8') : $value;
}
}
return $default;
}
// 使用示例
$userId = cleanGlobal('id', 'GP', 0, false); // 從 GET/POST 獲取 id,不轉義,默認 0
$keyword = cleanGlobal('kw'); // 從 GPC 獲取 kw,默認轉義 HTML 實體
?>
intval、floatval、trim、strip_tags 等過濾器鏈。參考手冊:htmlspecialchars | key_exists