"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > mysql_real_escape_string()을 사용자 정의문과 함께 안전하게 사용할 수 있습니까?

mysql_real_escape_string()을 사용자 정의문과 함께 안전하게 사용할 수 있습니까?

2024년 11월 13일에 게시됨
검색:299

Can mysql_real_escape_string() Be Used Safely with Custom Prepared Statements?

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()에서 사용하는 문자 집합에도 영향을 줍니다.

코드 예:

#include 

int 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