mysql_real_escape_string()은 SQL 주입에 대한 난공불락의 방패입니까?
justinshattuck.com의 섹션에 따르면 mysql_real_escape_string()은 특정 SQL 주입에 대해 오류가 있을 수 있습니다. 아시아 문자 인코딩. 특히 인코딩이 BIG5 또는 GBK를 사용하여 mysql_real_escape_string()을 우회하여 위험한 문자를 쿼리에 삽입한다고 주장합니다.
이 취약점이 실제로 있습니까?
Stefan Esser에 따르면, 대답은 당황스러울 정도로 그렇습니다. 그는 SET NAMES를 사용할 때 mysql_real_escape_string()이 불안정하다고 주장합니다. 이 메서드는 mysql_real_escape_string()에 알리지 않고 응용 프로그램의 요구에 맞게 인코딩을 전환합니다. 결과적으로 멀티바이트 인코딩에서 백슬래시를 두 번째, 세 번째 또는 네 번째 바이트로 허용하면 문제가 발생합니다. Mysql_real_escape_string()은 이러한 불규칙성을 인식하지 못하고 문자를 올바르게 이스케이프 처리하지 못합니다.
웹 사이트 보호
Esser는 UTF-8이 안전한 인코딩으로 남아 있다고 제안하지만 UTF -8이 항상 옵션은 아닙니다. 불행하게도 더 안전한 대안인 mysql_set_charset은 최신 PHP 버전에서만 사용할 수 있습니다.
위 내용은 `mysql_real_escape_string()`은 모든 문자 인코딩에서 SQL 주입에 대한 안정적인 방어입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!