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 중국어 웹사이트의 기타 관련 기사를 참조하세요!