針對 GET/POST 參數進行關鍵字檢測,發現疑似注入特徵即攔截。注意:此為輔助防禦,無法替代參數化查詢。
<?php
function Filter_SQL($strData) {
$strFilter = "'|and|\(|\)|exec|insert|select|delete|update|count|\*|%27|chr|mid|master|truncate|char|declare|union|or";
$blnFlag = false;
$arr = explode("|", $strFilter);
$str = "";
foreach ($arr as $row) {
$str .= preg_quote($row) . "|";
}
$str = trim($str, "|");
if (preg_match('/' . $str . '/i', $strData, $word)) {
return $word[0]; // 返回匹配到的關鍵字
}
return false;
}
// 測試
$string = "fasdf union ";
echo Filter_SQL($string); // 輸出:union
?>
// 輸入驗證層:白名單驗證(型別、長度、格式)
// 業務邏輯層:參數化查詢
// 資料庫層:最小權限帳號、WAF 防火牆
關鍵字過濾屬於「黑名單」機制,永遠跟不上攻擊變種。請將核心防禦投入於參數化查詢與輸入白名單驗證。