> 백엔드 개발 > PHP 튜토리얼 > PHP의 addlashes()가 여전히 SQL 주입 취약점으로 이어질 수 있습니까?

PHP의 addlashes()가 여전히 SQL 주입 취약점으로 이어질 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-02 15:46:12
원래의
847명이 탐색했습니다.

Can addslashes() in PHP Still Lead to SQL Injection Vulnerabilities?

PHP에서 addlashes()를 통한 SQL 인젝션 익스플로잇

PHP의 addlashes() 함수는 mysql_real_escape보다 덜 안전한 것으로 알려져 있습니다. SQL 주입 취약점을 방지합니다. addlashes()는 종종 한계로 인해 비판을 받기도 하지만 이것이 어떻게 성공적인 공격으로 이어질 수 있는지 이해하는 것이 중요합니다.

예시 시나리오

위생을 시도하는 다음 코드를 고려하세요. 사용자 입력:

$input = addslashes($_GET['input']);
$query = "SELECT * FROM users WHERE username='$input'";
로그인 후 복사

이 코드의 문제는 addlashes()가 처리하지 않는다는 것입니다. 멀티바이트 문자를 올바르게 입력하세요. 공격자가 백슬래시() 문자로 끝나는 멀티바이트 문자가 포함된 사용자 이름을 제공하는 경우 addlashes()는 백슬래시를 시퀀스 중간에 삽입하여 유효성을 깨뜨립니다. 이로 인해 백슬래시가 다음 작은따옴표를 이스케이프 처리하는 대신 SQL 쿼리 내에서 이스케이프 문자로 해석될 수 있습니다.

이 취약점을 악용할 수 있는 악의적인 입력의 예는 다음과 같습니다.

%E4%B8%80' OR 1=1 --
로그인 후 복사

addslashes()는 이를 다음으로 변환합니다.

%E4%B8%80\' OR 1=1 --
로그인 후 복사

이스케이프된 백슬래시()는 이제 멀티바이트의 유효한 부분이 됩니다. 시퀀스를 통해 공격자가 임의의 SQL 명령을 실행할 수 있습니다(이 경우 인증을 우회하기 위해).

일반 주의 사항

addlashes()를 속일 수 있기 때문에 취약점이 발생합니다. 다음 작은따옴표 문자를 이스케이프 처리하는 대신 유효한 멀티바이트 문자를 생성합니다. 이는 사용된 문자 인코딩에 0x5c(백슬래시 문자의 16진수 코드)로 끝나는 유효한 멀티바이트 문자가 포함된 경우에 발생합니다. UTF-8은 이 조건을 충족하지 않지만 Latin1과 같은 다른 인코딩은 충족합니다. 따라서 입력 삭제를 위해 addlashes()를 사용할 때 이러한 잠재적인 취약점을 인식하고 mysql_real_escape와 같은 보다 강력한 대안을 사용하는 것을 고려하는 것이 중요합니다.

위 내용은 PHP의 addlashes()가 여전히 SQL 주입 취약점으로 이어질 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿