본문 바로가기

코딩/PHP

[PHP] PHP에서 SQL Injection 공격을 방어하기

728x90
반응형

 

  • Prepared Statement 사용
    Prepared Statement는 입력값을 파라미터화하여 쿼리를 실행하기 전에 이미 값이 처리되어있기 때문에 SQL Injection 공격에 대해 안전합니다.
// MySQLi 예시
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
// PDO 예시
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $username, 'password' => $password]);
$result = $stmt->fetchAll();
728x90

 

  • 입력값 검증
    입력값을 검증하여 올바른 형식인지 확인하고, 필요한 경우 이스케이프 처리를 해줍니다. 다음은 예시 코드입니다.
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

 

 

 

 

  • 필터링
    필터링은 특정 문자열을 제거하거나 변경하여 SQL Injection 공격을 방어하는 방법입니다. 예를 들어, 숫자와 알파벳만 입력할 수 있는 필드에서는 이를 제외한 문자열을 필터링합니다.
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);

 

 

위와 같은 방법들을 조합하여 SQL Injection 공격에 대한 방어코드를 작성할 수 있습니다. 하지만 이 외에도 다양한 보안 이슈가 존재하기 때문에, 적절한 보안 검토와 테스트를 거쳐야 합니다.
 
 
728x90
반응형