>데이터 베이스 >MySQL 튜토리얼 >mysql_real_escape_string()은 SQL 주입 방지에 정말로 신뢰할 수 있습니까?

mysql_real_escape_string()은 SQL 주입 방지에 정말로 신뢰할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-04 15:04:11740검색

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()의 기능은 연결의 문자 집합에 영향을 받습니다. 최적의 성능을 보장하려면 SET NAMES 또는 SET CHARACTER SET 문 대신 mysql_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으로 문의하세요.