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