mysql_real_escape_string()이 깨졌나요? 심층 분석
광범위한 사용에도 불구하고 SQL 주입 공격을 방지하는 데 있어서 mysql_real_escape_string()의 효율성에 관해 몇 가지 우려가 제기되었습니다. 이 기사에서는 이러한 주장을 조사하고 이 함수에 대한 제한 사항과 대안을 살펴봅니다.
mysql_real_escape_string()
mysql_real_escape_string()에 대한 우려는 현재 함수에 대한 의존성에서 비롯됩니다. MySQL 연결의 문자 집합입니다. 이러한 종속성은 문자 집합이 제대로 구성되지 않았거나 쿼리 실행 중에 변경된 경우 취약점으로 이어질 수 있습니다.
MySQL 설명서에는 mysql_real_escape_string()에서 사용하는 문자 집합이 mysql_set_character_set(에 의해 제어된다고 명시적으로 명시되어 있습니다. ). SET NAMES 또는 SET CHARACTER SET 문을 사용하여 문자 집합을 설정하면 mysql_real_escape_string()에서 사용하는 문자 집합에 영향을 주지 않습니다.
증명 코드
다음 코드는 취약점을 보여줍니다. :
mysql_set_charset('latin1'); $escaped_string = mysql_real_escape_string("'@CHARACTER SET utf8");
이 예에서 mysql_set_charset()은 연결 문자 세트를 'latin1'로 설정합니다. 그러나 mysql_real_escape_string() 함수는 문자 집합이 'utf8'인 것처럼 여전히 문자열을 이스케이프합니다.
mysql_real_escape_string()의 대안
이러한 제한 사항을 고려하여, SQL 주입 방지를 위해 mysql_real_escape_string()에만 의존하지 않는 것이 좋습니다. 대신 다음 대안을 사용하는 것이 좋습니다.
결론
mysql_real_escape_string()이 문자열을 이스케이프하는 유효한 방법으로 남아 있지만 다음을 수행하는 것이 중요합니다. SQL 주입 공격을 방지하기 위해 제한 사항을 인지하고 추가 보안 조치를 취하십시오. 이러한 결함을 이해하고 완화함으로써 개발자는 악의적인 입력으로부터 MySQL 애플리케이션을 효과적으로 보호할 수 있습니다.
위 내용은 `mysql_real_escape_string()`은 정말 SQL 주입에 효과적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!