您可以依靠 mysql_real_escape_string() 來保護您的查詢嗎?
儘管使用正確,但人們仍然對 mysql_real_escape_string() 的可靠性提出了擔憂。 )以防止 SQL 注入。為了闡明這個問題,讓我們深入研究該函數的局限性及其創建自訂預先準備語句的適用性。
證明程式碼和分析:
根據 MySQL 官方根據文檔,mysql_real_escape_string() 的函數受連接字元集的影響。為了確保最佳效能,建議使用 mysql_set_character_set() 而不是 SET NAMES 或 SET CHARACTER SET 語句來修改字元集。
#include <mysql/mysql.h> int main() { // Create a MySQL connection MYSQL *conn = mysql_init(NULL); // Set the character set to UTF-8 using mysql_set_character_set() mysql_set_charset(conn, "utf8", MY_CS_PRIMARY); // Prepare a query using mysql_real_escape_string() char *query = mysql_real_escape_string(conn, "SELECT * FROM users"); // Execute the query mysql_query(conn, query); // Release memory free(query); mysql_close(conn); return 0; }
在此程式碼中,我們使用明確將字元集設定為UTF-8 mysql_set_character_set(),確保mysql_real_escape_string() 與正確的使用
結論:
雖然可能有某些限制,但mysql_real_escape_string() 仍然可以用來建立基本的準備好的語句。透過確保使用 mysql_set_character_set() 定義適當的字元集,您可以針對 SQL 注入保持所需的安全性等級。
以上是mysql_real_escape_string() 真的能可靠地防止 SQL 注入嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!