SQL 주입은 공격자가 데이터베이스 쿼리를 조작하고 잠재적으로 민감한 데이터를 손상시킬 수 있도록 해주기 때문에 웹 애플리케이션에 대한 주요 위협으로 남아 있습니다. 데이터베이스 무결성을 보호하려면 이 취약점을 방지하는 방법을 이해하는 것이 중요합니다.
SQL 주입에 대한 가장 효과적인 솔루션은 데이터를 SQL 명령과 별도로 유지하는 것입니다. 데이터는 원시 입력으로 처리되어야 하며 데이터베이스 서버의 명령으로 해석될 수 없습니다. 이는 여러 가지 이점을 제공하는 준비된 문과 매개변수화된 쿼리를 사용하여 달성할 수 있습니다.
PDO(지원되는 모든 데이터베이스의 경우) 또는 MySQLi(MySQL의 경우)와 함께 준비된 문을 사용하면 SQL 방지를 위한 강력한 메커니즘을 제공합니다. 주입:
PDO:
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(['name' => $name]);
MySQLi:
$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute();
올바른 기능을 보장하려면 PDO 및 MySQLi에 특정 요구 사항이 필요합니다. 구성:
PDO:
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbConnection->set_charset('utf8mb4');
MySQLi:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $dbConnection->set_charset('utf8mb4');
SQL 주입 방지를 넘어 준비된 명령문은 추가 기능을 제공합니다. 장점:
준비된 문은 매개변수화를 지원하지만 쿼리 구조를 동적으로 변경하는 데 사용할 수는 없습니다. 이러한 시나리오에는 화이트리스트 필터와 같은 대체 접근 방식이 권장됩니다.
위 내용은 PHP의 준비된 명령문은 어떻게 SQL 삽입 공격을 효과적으로 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!