>데이터 베이스 >MySQL 튜토리얼 >멀티바이트 문자를 사용하는 경우에도 PHP의 addlashes()가 SQL 주입에 대해 정말 안전한가요?

멀티바이트 문자를 사용하는 경우에도 PHP의 addlashes()가 SQL 주입에 대해 정말 안전한가요?

Linda Hamilton
Linda Hamilton원래의
2025-01-15 19:37:44508검색

Is addslashes() in PHP Truly Safe Against SQL Injection, Even with Multibyte Characters?

PHP의 addslashes()과 SQL 인젝션 취약점

SQL 삽입 공격에 대한 보호 수단으로 자주 사용되는 PHP 함수addslashes()에는 특히 멀티바이트 문자를 처리할 때 보안을 손상시킬 수 있는 제한 사항이 있습니다. 이 문서에서는 addslashes()가 적절한 보호를 제공하지 못하는 경우

의 시나리오를 살펴봅니다.

멀티바이트 문자 인코딩 문제

입력 데이터에 멀티바이트 문자가 포함된 경우 addslashes()는 백슬래시를 잘못 삽입하여 이스케이프 시퀀스를 방해하고 취약점을 생성할 수 있습니다. 이는 addslashes()이 멀티바이트 문자의 인코딩을 정확하게 처리하지 못할 수 있기 때문에 발생합니다.

예시:

<code class="language-php">$input = "⭐' OR 1=1 --";
$escapedInput = addslashes($input); // Escapes as ⭐\' OR 1=1 --</code>

여기서 멀티바이트 별표 문자 뒤의 작은따옴표는 이스케이프 처리되지 않은 상태로 유지되어 시스템이 SQL 주입에 노출됩니다.

인코딩 관련 취약점

문제는 addslashes()가 EUC-JP 또는 Shift-JIS와 같은 멀티바이트 문자 인코딩을 올바르게 해석하지 못할 가능성이 있기 때문에 발생합니다. 이러한 인코딩의 특정 문자 시퀀스에는 후행 0x5c 바이트가 포함되어 addslashes() 작은따옴표를 이스케이프하는 대신 멀티바이트 문자를 생성하도록 오해할 수 있습니다.

모범 사례: 그 이상 addslashes()

addslashes()은 몇 가지 기본적인 보호 기능을 제공하지만, 특히 멀티바이트 문자 집합의 경우 SQL 삽입을 방지하기 위한 안정적인 솔루션은 아닙니다. 강력한 보안을 위해 mysqli_real_escape_string()(MySQLi의 경우) 또는 이상적으로는 준비된 명령문과 같은 고급 기술을 활용하세요. 준비된 문은 SQL 주입 취약점을 예방하기 위해 권장되는 접근 방식입니다.

위 내용은 멀티바이트 문자를 사용하는 경우에도 PHP의 addlashes()가 SQL 주입에 대해 정말 안전한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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