PHP Magic Quotes 관련 오류 해결

프리터코더·2025년 5월 25일

php 문제 해결

목록 보기
5/79

Magic Quotes란?

Magic Quotes는 PHP의 오래된 기능으로, 사용자로부터 받은 GET, POST, COOKIE 데이터의 특수문자(' " \ NULL) 앞에 자동으로 백슬래시()를 추가하는 기능입니다. SQL 인젝션을 방지하기 위해 도입되었으나, 여러 문제를 일으켜 PHP 5.4.0부터 완전히 제거되었습니다.

영향을 받는 지 확인하는 방법

<?php
if(get_magic_quotes_gpc()) {
    echo "Magic Quotes가 활성화되어 있습니다.";
} else {
    echo "Magic Quotes가 비활성화되어 있습니다.";
}
?>

현대적인 해결방법

1. 데이터 이스케이프 처리

$db = new PDO("mysql:host=localhost;dbname=mydb", "user", "password");
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $userName]);

2. 사용자 입력 필터링

$cleanInput = filter_input(INPUT_POST, 'userInput', FILTER_SANITIZE_STRING);
$cleanEmail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

3. MySQL 실시간 이스케이프

$escaped_string = mysqli_real_escape_string($connection, $user_input);

Magic Quotes 대체 방법

1. Prepared Statements 사용

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
    'name' => $userName,
    'email' => $userEmail
]);

2. HTML 특수문자 변환

$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

데이터 검증 함수 구현

function sanitizeInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

모범 사례

  • PDO나 MySQLi 사용
  • 입력값 검증
  • 출력값 이스케이프
  • 보안 라이브러리 활용

보안 강화 팁

  • 데이터베이스 접근 시 항상 Prepared Statements 사용
  • 사용자 입력 데이터는 항상 검증
  • XSS 방지를 위한 출력 이스케이프
  • 최신 PHP 버전 사용
profile
일용직 개발자. freetercoder@gmail.com

0개의 댓글