>데이터 베이스 >MySQL 튜토리얼 >`mysql_real_escape_string()`과 `mysql_escape_string()`은 SQL 주입 공격을 예방하는 데 충분합니까?

`mysql_real_escape_string()`과 `mysql_escape_string()`은 SQL 주입 공격을 예방하는 데 충분합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-29 21:20:15616검색

Are `mysql_real_escape_string()` and `mysql_escape_string()` Sufficient for Preventing SQL Injection Attacks?

mysql_real_escape_string() 및 mysql_escape_string()의 보안 문제

mysql_real_escape_string() 및 mysql_escape_string()이 애플리케이션에 적합합니까? 보안?

사용자 입력을 삭제하는 이러한 기능이 널리 보급되어 있음에도 불구하고 SQL 공격 및 잠재적인 악용에 대한 보호의 한계에 대한 우려가 지속됩니다.

SQL 주입은 여전히 ​​위협입니다. :

mysql_real_escape_string()은 기본적으로 표준 SQL을 방지하기 위한 것입니다. 주사. 그러나 고급 주입 기술에 대해서는 제한된 보호 기능을 제공합니다.

다음 코드를 고려하세요.

$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($username) . "'";

공격자는 다음과 같이 테이블이나 열 이름을 악용하여 주입을 실행할 수 있습니다.

$username = "'); DROP TABLE users; --";

LIKE SQL 공격:

LIKE SQL 주사 또한 이 기능에 취약합니다. 예를 들어, 공격자는 다음과 같이 할 수 있습니다.

$data = '%';
$sql = "SELECT * FROM users WHERE username LIKE '" . mysql_real_escape_string($data) . "%'"; # Can retrieve all results

유니코드 문자 집합 악용:

문자 집합 악용은 올바른 HTML 구성에도 불구하고 공격자에게 광범위한 제어 권한을 부여할 수 있습니다.

LIMIT 필드 악용:

LIMIT 필드를 이스케이프하면 공격자가 승인되지 않은 데이터를 검색할 수도 있습니다.

$sql = "SELECT * FROM users LIMIT '" . mysql_real_escape_string($limit) . "'"; # Can retrieve all results

강력한 대안으로 준비된 진술:

데이터베이스 보안을 위한 이상적인 솔루션은 준비된 명령문을 사용하는 것입니다. 준비된 문은 서버 측에서 SQL 쿼리를 실행하여 예기치 않은 SQL이 실행되는 것을 방지합니다. 다음 예를 고려하십시오.

$statement = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$statement->execute(array($username));

준비된 문을 사용하면 SQL 서버의 보호 메커니즘을 활용하고 알려지거나 알려지지 않은 악용으로부터 보호받을 수 있습니다.

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

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