>백엔드 개발 >PHP 튜토리얼 >PHP의 `addslashes()`가 SQL 주입 공격을 방지하기에 충분합니까?

PHP의 `addslashes()`가 SQL 주입 공격을 방지하기에 충분합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-01 12:12:13177검색

Is `addslashes()` in PHP Sufficient to Prevent SQL Injection Attacks?

addlashes()를 통한 SQL 주입 취약점

PHP에서 addlashes() 함수는 문자열의 특수 문자를 이스케이프하는 데 사용됩니다. 그러나 이 함수는 SQL 주입 공격에 취약한 것으로 알려져 있습니다.

예제 1

다음 SQL 문을 고려하세요.

SELECT * FROM users WHERE username = '$username'

$username 변수에 작은따옴표 문자(')가 포함되어 있는 경우 공격자는 다음과 같은 값을 전송하여 이 취약점을 악용할 수 있습니다. as:

admin' OR 1=1

다음 SQL 문이 생성됩니다.

SELECT * FROM users WHERE username = 'admin'' OR 1=1'

addlashes() 함수는 작은따옴표 문자를 이스케이프하지만 공백 문자는 이스케이프하지 않습니다. 결과적으로, 의도한 대로 SQL 문이 실행되고, 공격자는 관리자 계정에 접근할 수 있게 된다.

예제 2

또 다른 예 addlashes()를 통한 SQL 주입 취약점은 0x5c(백슬래시)로 끝나는 멀티바이트 문자 사용과 관련됩니다. 이렇게 하면 뒤에 나오는 작은따옴표를 이스케이프 처리하는 대신 addlashes() 함수가 유효한 멀티바이트 문자를 생성하도록 속일 수 있습니다.

SELECT * FROM users WHERE username = '$username'

$username 변수에 다음 멀티바이트 문자가 포함된 경우:

"\x5c'"

addlashes() 함수는 백슬래시 문자를 이스케이프하지만 작은따옴표 문자는 이스케이프하지 않습니다. 이로 인해 다음과 같은 SQL 문이 생성됩니다.

SELECT * FROM users WHERE username = "\x5c'\x27"

SQL 문은 의도한 대로 실행되며 공격자는 데이터베이스에 접근할 수 있게 됩니다.

결론

SQL 주입 공격을 방지하기 위해 addlashes() 함수를 사용해서는 안 됩니다. 대신 개발자는 mysql_real_escape 또는 PDO::quote와 같은 보다 안전한 기능을 사용해야 합니다.

위 내용은 PHP의 `addslashes()`가 SQL 주입 공격을 방지하기에 충분합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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