집 >데이터 베이스 >MySQL 튜토리얼 >mysql_real_escape_string()은 SQL 주입 방지에 정말로 신뢰할 수 있습니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!