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