首頁 >資料庫 >mysql教程 >mysql_real_escape_string() 真的能可靠地防止 SQL 注入嗎?

mysql_real_escape_string() 真的能可靠地防止 SQL 注入嗎?

Linda Hamilton
Linda Hamilton原創
2024-12-04 15:04:11741瀏覽

Is mysql_real_escape_string() Truly Reliable for Preventing SQL Injection?

您可以依靠 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn