>  기사  >  데이터 베이스  >  mysql_real_escape_string()은 아시아 인코딩을 사용한 SQL 주입에 취약합니까?

mysql_real_escape_string()은 아시아 인코딩을 사용한 SQL 주입에 취약합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-27 22:54:10715검색

Is mysql_real_escape_string() Vulnerable to SQL Injection with Asian Encodings?

아시아 인코딩을 사용한 SQL 주입에 대한 mysql_real_escape_string()의 보안 평가

질문:

다음과 같은 보안 취약점이 보고되었습니다. mysql_real_escape_string()은 BIG5 또는 GBK와 같은 특정 아시아 문자 인코딩을 사용하여 우회할 수 있습니다. 이 취약점이 유효한가요? 그렇다면 준비된 명령문을 사용하지 않고 어떻게 완화할 수 있습니까?

답변:

PHP 개발자인 Stefan Esser에 따르면 mysql_real_escape_string( )은 특정 인코딩 설정이 다음과 같은 경우 SQL 주입에 대해 완전히 안전하지 않습니다.

설명:

이 문제는 SET NAMES 명령을 사용하여 데이터베이스 문자 인코딩을 변경할 때 발생합니다. 이러한 인코딩 변경은 백슬래시()와 같은 특수 문자가 이스케이프되는 방식에 영향을 줍니다. Mysql_real_escape_string()은 기본 인코딩을 가정하고 이에 따라 이스케이프 논리를 조정하지 않습니다.

따라서 공격자가 백슬래시를 후속 바이트로 허용하는 인코딩을 사용하는 경우 mysql_real_escape_string()은 이러한 문자를 제대로 이스케이프하지 못할 수 있습니다. 이는 성공적인 SQL 주입 공격으로 이어질 수 있습니다.

완화:

준비된 문을 사용할 수 없을 때 이 취약점을 해결하려면:

  1. 사용 SET NAMES에 의존하는 대신 데이터베이스 문자 인코딩을 명시적으로 설정하는 mysql_set_charset() 함수. 이렇게 하면 mysql_real_escape_string()이 올바른 인코딩 정보로 작동하도록 보장됩니다.
  2. SQL 삽입에서 백슬래시가 오용되는 것을 방지하는 방식으로 백슬래시를 처리하는 UTF-8과 같은 안전한 인코딩으로 전환하세요.

위 내용은 mysql_real_escape_string()은 아시아 인코딩을 사용한 SQL 주입에 취약합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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