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은 다음과 같이 잘못 사용되는 경향이 있습니다.
mysql_real_escape_string은 올바르게 사용하면 주입 공격으로부터 보호할 수 있지만, 포괄적인 안전을 보장하려면 준비된 문과 같은 보다 강력한 기술을 채택하는 것이 좋습니다.
위 내용은 `mysql_real_escape_string`은 SQL 주입에 대한 안정적인 방어입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!