mysql_real_escape_string() 是否有致命缺陷?
儘管聲稱其不可靠,但 mysql_real_escape_string() 仍然是創建您自己的準備好的語句的寶貴工具。下面詳細介紹了它的功能以及如何有效地使用它。
mysql_real_escape_string() 解釋
MySQL C API 文件指出:「如果您需要更改字元設定連接,您應該使用 NAMESsql_set_character_set() 函數而不是執行SET NAMESsql(或SET CHARACTER SET)語句。 PHP 的 mysql_set_charset() 鏡像 MySQL 的 mysql_set_character_set()。
證明程式碼在此範例中,mysql_set_charset() 確保連線使用 utf8mb4 字元集。這允許 mysql_real_escape_string() 正確處理可能容易受到 SQL 注入攻擊的字元。
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); // Set the character set using mysql_set_charset() $mysqli->set_charset("utf8mb4"); // Prepared statement using mysql_real_escape_string() $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt->bind_param('s', mysql_real_escape_string($_GET['username'])); $stmt->execute(); ?>
雖然了解mysql_real_escape_string() 的限制很重要,但使用它與mysql_set_charset() 結合使用可以讓您有效地創建自己的準備好的語句。透過這些步驟,您可以降低 SQL 注入的風險並維護應用程式的安全性。
以上是`mysql_real_escape_string()` 真的有缺陷,還是只是被誤解了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!