> 데이터 베이스 > MySQL 튜토리얼 > mysql_real_escape_string은 SQL 주입에 대해 정말로 효과적이며 그 한계는 무엇입니까?

mysql_real_escape_string은 SQL 주입에 대해 정말로 효과적이며 그 한계는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-29 00:19:10
원래의
465명이 탐색했습니다.

Is mysql_real_escape_string Truly Effective Against SQL Injection, and What Are Its Limitations?

mysql_real_escape_string: 잠재적인 함정

SQL 주입 공격으로부터 보호하기 위한 mysql_real_escape_string 함수는 그 한계로 인해 정밀 조사를 받았습니다. 보안을 강화할 수 있지만 특정 단점으로 인해 효율성이 저하됩니다.

잘못된 사용법 및 숫자 값

중요한 문제 중 하나는 mysql_real_escape_string을 잘못 적용하는 것입니다. 이는 SQL 쿼리 내에서 문자열 값을 이스케이프하기 위해서만 설계되었습니다. 그러나 예와 같이 숫자 값에 적용하면

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
로그인 후 복사

다음과 같은 공격을 방지하는 데 실패합니다.

5 OR 1=1
로그인 후 복사

따옴표가 없는 문자열 삽입

다음에서 mysql_real_escape_string을 사용할 때 또 다른 취약점이 발생합니다. 시나리오:

$sql = "... `foo` = $value ...";
로그인 후 복사

여기서 입력은 적절한 이스케이프 및 인용 없이 삽입되어 SQL 주입 공격이 가능합니다. 마찬가지로

$sql = "... `$value` ...";
로그인 후 복사

과 같은 변수에 적용하면 취약점이 지속됩니다.

데이터베이스 연결 인코딩 충돌

또한 mysql_ API에 설정된 인코딩과 데이터베이스는 취약점을 생성할 수 있습니다. 다음과 같은 잘못된 방법을 사용하여 데이터베이스 인코딩을 설정하면

mysql_query("SET NAMES 'utf8'", $link);
로그인 후 복사

문자열 이스케이프에 불일치가 발생하여 잠재적인 주입 공격이 발생할 수 있습니다.

결론

mysql_real_escape_string은 SQL 주입 공격에 대해 어느 정도 보호 기능을 제공할 수 있지만 사용 사례가 좁고 잘못된 응용 프로그램에 대한 취약성이 있습니다. 덜 바람직한 옵션으로 만드십시오. 보다 강력한 보안을 위해 개발자는 취약성에 대해 더 큰 보호를 제공하는 준비된 명령문과 같은 대체 방법을 모색하는 것이 좋습니다.

위 내용은 mysql_real_escape_string은 SQL 주입에 대해 정말로 효과적이며 그 한계는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿