mysql_real_escape_string() 和 mym_e_string(sql) 嗎?
儘管如此雖然這些函數用於清理使用者輸入的盛行,但人們仍然擔心它們在防範 SQL 攻擊和潛在漏洞方面的局限性。
SQL 注入仍然是一個威脅:
mysql_real_escape_string( )主要是為了防止標準 SQL 注入。但是,它對高級注入技術提供的保護有限。
考慮以下程式碼:
$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";
攻擊者仍然可以透過利用表或列名稱來執行注入,如下所示:
$username = "'); DROP TABLE users; --";
LIKE SQL 攻擊:
LIKE SQL此功能的注入也容易受到攻擊。例如,攻擊者可以:
$data = '%'; $sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results
Unicode 字元集漏洞:
儘管 HTML 設定正確,但字元集漏洞可以授予攻擊者廣泛的控制權。
LIMIT 欄位漏洞利用:
轉義LIMIT 欄位也可以讓攻擊者擷取未經授權的資料:
$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results
準備語句作為穩健的替代方案:
資料庫安全的理想解決方案是使用準備好的語句。準備好的語句在伺服器端執行 SQL 查詢,防止執行意外的 SQL。考慮這個範例:$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $statement->execute(array($username));透過使用準備好的語句,您可以利用 SQL Server 的保護機制,並防止已知和未知的攻擊。
以上是`mysql_real_escape_string()` 和 `mysql_escape_string()` 足以防止 SQL 注入攻擊嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!