현재 위치: > 최신 기사 목록> PHP 형태의 SQL 주입 공격을 효과적으로 방지하는 방법은 무엇입니까? 최고의 보호 방법 분석

PHP 형태의 SQL 주입 공격을 효과적으로 방지하는 방법은 무엇입니까? 최고의 보호 방법 분석

M66 2025-07-07

PHP 형태의 SQL 주입 공격을 방지하는 방법은 무엇입니까?

SQL 주입 공격은 일반적이며 웹 개발에서 매우 위협적인 보안 취약점입니다. 공격자는이 취약점을 악용하여 악의적 인 코드를 데이터베이스에 주입하여 데이터베이스 무결성을 파괴하거나 민감한 정보를 유출합니다. PHP 양식 처리에서 SQL 주입 공격을 효과적으로 방지하는 핵심은 사용자가 입력 한 데이터를 엄격하게 필터링하고 인코딩하는 것입니다. 이 기사는 SQL 주입 공격을 방지하는 방법을 자세히 설명하고 코드 예제와 함께 솔루션을 제공합니다.

전처리 명세서를 사용한 SQL 주입 방지

전처리 명세서는 SQL 주입을 효과적으로 방지 할 수있는 구문 분석 및 컴파일을 위해 데이터베이스 서버에 SQL 문을 사전 세트하는 기술입니다. 매개 변수화 쿼리를 통해 사용자 입력 데이터를 SQL 문에서 구분하여 악성 데이터의 주입을 피합니다. PHP에서 PDO는 편리한 전처리 명령문 기능을 제공하며 다음은 구현의 예제 코드입니다.

 // 데이터베이스에 연결하십시오
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
    // 오류 모드를 예외로 설정하십시오
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo '데이터베이스 연결에 실패했습니다:' . $e->getMessage();
}

// 준비하다SQL성명
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');

// 바인딩 매개 변수
$stmt->bindParam(':username', $username);

// 쿼리를 실행하십시오
$stmt->execute();

// 결과를 얻으십시오
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 출력 결과
foreach ($result as $row) {
    echo $row['username'];
}

이 코드에서 먼저 SQL 쿼리 문은 repary () 메소드를 통해 준비되며 자리 표시 자 : 사용자가 입력 한 사용자 이름 대신 사용자 이름이 사용됩니다. 실제 사용자 이름은 BindParam () 메소드를 통해 자리 표시 자에 바인딩되며 쿼리가 최종적으로 실행되어 사용자 데이터를 SQL 문에 직접 삽입하지 않습니다.

필터링 기능을 사용하여 데이터 보안을 향상시킵니다

PHP는 특히 SQL 주입 공격을 유발할 수있는 특수 문자 및 SQL 키워드를 제거하기 위해 사용자 입력 데이터를 정리하고 필터링하기위한 다양한 필터링 기능을 제공합니다. mysqli_real_escape_string ()은 일반적으로 사용되는 필터링 기능으로 사용자가 입력 한 문자열을 피하고 특수 문자가 SQL 문에 미치는 영향을 피할 수 있습니다. 다음은이 기능을 사용하는 코드 예입니다.

 // 데이터베이스에 연결하십시오
$servername = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test';

$conn = mysqli_connect($servername, $username, $password, $dbname);

// 연결이 성공했는지 확인하십시오
if (!$conn) {
    die('데이터베이스 연결에 실패했습니다: ' . mysqli_connect_error());
}

// 필터 사용자 입력 데이터
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

// 쿼리를 실행하십시오
$sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";
$result = mysqli_query($conn, $sql);

// 처리 결과
if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        echo '사용자 이름입니다: ' . $row['username'];
    }
} else {
    echo '잘못된 사용자 이름 또는 비밀번호';
}

// 연결을 닫으십시오
mysqli_close($conn);

mysqli_real_escape_string () 함수를 통해 사용자가 입력 한 사용자 이름과 비밀번호를 필터링하여 특수 문자 또는 SQL 키워드가 실행되는 것을 피하여 SQL 주입 공격을 방지합니다.

요약

PHP 형태의 SQL 주입 공격을 방지하는 방법에는 여러 가지가 있으며, 가장 일반적이고 효과적인 전략에는 전처리 명세서 및 필터링 기능 사용이 포함됩니다. 어느 쪽이든, 사용자가 입력 한 모든 데이터가 웹 사이트의 보안을 보장하기 위해 엄격하게 필터링되고 인코딩되도록하는 것이 중요합니다. 개발자는 또한 가능한 보안 위험을 즉시 수정하고 사용자 데이터 및 웹 사이트 정보를 보호하기 위해 정기적 인 보안 검토 및 취약성 스캔을 수행해야합니다.