>  기사  >  백엔드 개발  >  `mysql_real_escape_string`은 SQL 주입에 대한 안정적인 방어입니까?

`mysql_real_escape_string`은 SQL 주입에 대한 안정적인 방어입니까?

DDD
DDD원래의
2024-10-26 05:00:31714검색

Is `mysql_real_escape_string` a Reliable Defense Against SQL Injection?

mysql_real_escape_string의 단점

mysql_real_escape_string은 SQL 주입 공격을 방지하기 위해 입력 데이터를 필터링하는 형태를 제공하지만 그 한계에 주의해야 합니다.

쿼리 연결:
언급한 것처럼 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이 제공하는 보호 장치를 우회하여 숫자 값을 문자열로 처리할 수 있습니다.

좁은 범위:
mysql_real_escape_string은 SQL 문의 인용 문자열 내에 포함되도록 의도된 문자열 값을 수정하기 위해 특별히 설계되었습니다.

$value = mysql_real_escape_string($value, $link);
$sql = "... `foo` = '$value' ...";

이 좁은 맥락 밖에서 사용되는 경우 mysql_real_escape_string은 실수로 구문 오류 또는 XSS 취약점이 발생합니다.

문자 집합 불일치:
데이터베이스 연결 인코딩을 잘못 설정하면 취약점이 발생할 수 있습니다. mysql_query("SET NAMES 'utf8'", $link)를 사용하여 문자 인코딩을 설정하면 mysql_ API가 문자열을 처리하는 방식과 데이터베이스가 문자열을 해석하는 방식 간에 불일치가 발생할 수 있습니다.

잘못된 구현:
mysql_real_escape_string은 다음과 같이 잘못 사용되는 경향이 있습니다.

  • 따옴표로 묶지 않은 값에 적용
  • SQL 쿼리 자체에 포함
  • Prepared 문을 대체하는 것으로 오해

mysql_real_escape_string은 올바르게 사용하면 주입 공격으로부터 보호할 수 있지만, 포괄적인 안전을 보장하려면 준비된 문과 같은 보다 강력한 기술을 채택하는 것이 좋습니다.

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

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