「mysqli_real_escape_string」能否有效緩解 SQL 注入攻擊?
儘管「mysqli_real_escape_string」功能被廣泛使用,但僅靠「mysqli_real_escape_string」功能不足以完全防範防止SQL注入
「mysqli_real_escape_string」的限制
「mysqli_real_escape_string」旨在轉義特殊字符,否則可能會被利用來操縱預期的SQL 查詢。然而,它對模式匹配的依賴僅涵蓋有限的字元集,為攻擊者透過替代方法注入惡意程式碼留下了空間。
準備語句的優越性
為了有效防止SQL注入,強烈建議使用準備好的語句。準備好的語句將資料(參數)與實際查詢字串隔離,防止任何污染的可能性。這種分離有效地消除了 SQL 注入的威脅,即使在複雜的查詢中也是如此。
額外的安全措施
在預準備語句不可行的情況下,可以使用嚴格的白名單實現將輸入限制為預定的安全值。這種方法可確保在 SQL 查詢中僅使用經過批准的數據,從而最大限度地降低惡意注入的風險。
範例實作
考慮以下程式碼片段,使用準備好的語句來防止SQL 注入:
$query = $db->prepare("INSERT INTO `users` (`email`,`psw`) VALUES (?, ?)"); $query->execute([$email, $psw]);
在此範例中,資料(電子郵件和psw)作為參數傳遞給準備好的
因此,雖然「mysqli_real_escape_string」提供了一些保護,但使用準備好的語句和/或嚴格的白名單仍然是針對SQL 注入攻擊的最可靠和安全的解決方案。
以上是`mysqli_real_escape_string` 是否提供足夠的保護來防止 SQL 注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!