데이터베이스 보호: 준비된 명령문 및 SQL 주입 방지
SQL 주입은 공격자가 데이터베이스 입력에 유해한 SQL 코드를 주입할 수 있는 심각한 보안 취약점으로 남아 있습니다. 방어의 핵심 원칙은 실행 가능한 SQL 명령과 데이터를 엄격하게 분리하는 것입니다. 이렇게 하면 데이터가 잠재적으로 위험한 지침이 아닌 데이터로 처리됩니다.
준비된 진술: 최선의 방어
SQL 삽입을 방지하는 가장 강력한 접근 방식은 준비된 문을 사용하는 것입니다. 이는 매개변수가 별도로 처리되어 악성 코드 삽입을 방지하는 사전 컴파일된 SQL 쿼리입니다. 준비된 명령문을 구현하는 데 널리 사용되는 PHP 확장에는 PDO 및 MySQLi가 있습니다.
PDO와 MySQLi를 이용한 준비된 문장 활용
PDO: PDO는 명확하고 일관된 접근 방식을 제공합니다.
<code class="language-php">$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(['name' => $name]);</code>
MySQLi(PHP 8.1 이하):
<code class="language-php">$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); // 's' denotes a string parameter $stmt->execute();</code>
MySQLi(PHP 8.2 이상): PHP 8.2는 프로세스를 단순화합니다.
<code class="language-php">$result = $db->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);</code>
필수 데이터베이스 연결 구성
올바른 데이터베이스 연결 설정은 준비된 명령문이 효과적으로 작동하는 데 필수적입니다.
PDO: 최적의 보안을 위해 에뮬레이트된 준비된 문을 비활성화합니다.
<code class="language-php">$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8mb4', 'user', 'password'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);</code>
MySQLi: 강력한 오류 처리 및 문자 집합 설정 구현:
<code class="language-php">mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Enable detailed error reporting $dbConnection = new mysqli('127.0.0.1', 'username', 'password', 'test'); $dbConnection->set_charset('utf8mb4'); // Set character set</code>
준비문의 장점
준비된 명세서는 다양한 이점을 제공합니다.
위 내용은 준비된 문은 어떻게 SQL 주입을 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!