在 PHP 開發中,數據過濾是確保應用安全的關鍵環節。無論是防止 SQL 注入、跨站腳本攻擊 (XSS),還是處理用戶輸入,正確的過濾策略能有效降低安全風險。本文將系統介紹 PHP 中常用的數據過濾函數、最佳實踐及實戰代碼示例。
addslashes() 轉義特殊字符,或針對整數類型採用 intval() 強制轉換,可有效防禦 SQL 注入。php.ini 中開啟 magic_quotes_gpc 和 magic_quotes_runtime(注意:PHP 5.4+ 已移除此特性,建議改用預處理語句)。escapeshellarg() 和 escapeshellcmd() 對參數進行轉義。htmlspecialchars() 或 strip_tags() 將用戶提交的 HTML/PHP 標簽轉換為無害實體字符。include()、unlink()、fopen() 等涉及文件系統的函數,嚴格驗證傳入參數,避免目錄遍歷漏洞。// 入庫處理 $str = trim($input); $str = addslashes($str); // 出庫處理 $str = stripslashes($str); // 顯示輸出 echo htmlspecialchars(nl2br($str));
採用分發腳本(如 dispatch.php)集中處理請求,確保安全檢查不被繞過。結合白名單機制,僅允許預期的字段通過驗證:
$allowed = ['form', 'username', 'password'];
$sent = array_keys($_POST);
if ($allowed === $sent) {
include '/inc/logic/process.inc';
}
整數與浮點數驗證
$v) $array[$k] = sec($v); } elseif (is_string($array)) { $array = addslashes($array); } elseif (is_numeric($array)) { $array = intval($array); } return $array; } // 整型檢查 function num_check($id) { if (!$id || inject_check($id) || !is_numeric($id)) die('非法參數'); return intval($id); } // 字符檢查 function str_check($str) { if (inject_check($str)) die('非法參數'); return htmlspecialchars($str); } // SQL 關鍵字過濾 function inject_check($sql_str) { return preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile/i', $sql_str); }表單處理流程總結
典型流程:
addslashes→htmlspecialchars→mysql_real_escape_string(配合預處理語句更佳)。數值類型優先用intval(),建議在入口文件統一循環處理$_POST/$_GET。數據過濾實戰片段
掌握上述過濾技巧,配合現代框架的 ORM 和參數綁定功能,能構建更健壯的 PHP 應用。