攻擊者透過 Web 表單、URL 參數等輸入惡意 SQL 片段,欺騙伺服器執行非預期指令(如刪除資料、竊取機密資訊)。
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) {
$result = mysql_query("SELECT * FROM users WHERE username='$matches[0]'");
} else {
echo "username 輸入異常";
}
if (get_magic_quotes_gpc()) {
$name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='$name'");
使用者輸入含 _ 或 % 會導致模糊比對異常,需用 addcslashes 轉義:
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub 變為 \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes(string, characters) 會在指定字元前加上反斜線。