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 중국어 웹사이트의 기타 관련 기사를 참조하세요!