>  기사  >  백엔드 개발  >  `mysql_real_escape_string()`은 정말 SQL 주입에 효과적인가요?

`mysql_real_escape_string()`은 정말 SQL 주입에 효과적인가요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 13:10:02984검색

Is `mysql_real_escape_string()` Really Effective Against SQL Injection?

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()에만 의존하지 않는 것이 좋습니다. 대신 다음 대안을 사용하는 것이 좋습니다.

  • 준비된 명령문: PHP의 PDO 또는 mysqli 기능을 사용하여 쿼리를 실행할 준비된 명령문을 생성하세요.
  • 문자 집합 조작: mysql_set_charset()을 사용하여 올바른 문자 집합이 설정되어 있고 쿼리 실행 중에 변경되지 않는지 확인하세요.
  • 검증 및 필터링: 입력 검증을 구현하고 쿼리에 악의적인 문자가 삽입되는 것을 방지하는 필터링 기술입니다.

결론

mysql_real_escape_string()이 문자열을 이스케이프하는 유효한 방법으로 남아 있지만 다음을 수행하는 것이 중요합니다. SQL 주입 공격을 방지하기 위해 제한 사항을 인지하고 추가 보안 조치를 취하십시오. 이러한 결함을 이해하고 완화함으로써 개발자는 악의적인 입력으로부터 MySQL 애플리케이션을 효과적으로 보호할 수 있습니다.

위 내용은 `mysql_real_escape_string()`은 정말 SQL 주입에 효과적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.