mysql_real_escape_string()有無法修復的缺陷嗎?
一些懷疑論者認為mysql_real_escape_string()函數存在根本缺陷,無法可靠地保護SQL查詢。他們指出過時的文章作為證據。
它可以用來自訂準備語句嗎?
儘管有這些擔憂,仍然可以利用 mysql_real_escape_string() 來建立自訂準備的語句。但是,它需要仔細注意字符集處理。
解決方案:
根據mysql_real_escape_string()的MySQL C API文檔,應該使用mysql_set_character_set()來設定字元集。這確保它也會影響 mysql_real_escape_string() 使用的字元集。
程式碼範例:
#includeint main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
透過遵循此方法並避免 SET NAMES/SET CHARACTER SET,您可以有效地利用 mysql_real_escape_string() 來保護您的 SQL 查詢免受注入。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3