
mysqli::real_escape_string 함수는 사용자가 입력한 데이터를 SQL 쿼리에 삽입하기 전에 이스케이프 처리를 해주는 함수입니다. 이스케이프 처리란 특수 문자를 일반 문자로 변환하는 것을 의미합니다.
예를 들어, 사용자가 입력한 이름이 "John' OR 1=1 --"이라면, 이 이름을 데이터베이스에 저장할 때 SQL 인젝션 공격을 막을 수 있는 방법은 다음과 같습니다.
#hostingforum.kr
php
$mysqli = new mysqli("localhost", "username", "password", "database");
$name = "John' OR 1=1 --";
$escaped_name = $mysqli->real_escape_string($name);
$query = "INSERT INTO users (name) VALUES ('$escaped_name')";
$mysqli->query($query);
$mysqli->close();
mysqli::real_escape_string 함수를 사용하면, 사용자가 입력한 이름이 "John' OR 1=1 --"인 경우, 이 이름을 다음과 같이 이스케이프 처리합니다.
#hostingforum.kr
php
$escaped_name = "John' OR 1=1 --";
이렇게 이스케이프 처리된 이름을 데이터베이스에 저장하면, SQL 인젝션 공격을 막을 수 있습니다.
mysqli::real_escape_string 함수는 PHP 5.3.6부터 deprecated되었으며, PHP 7.0부터는 사용할 수 없습니다. 대신, prepared statement를 사용하는 것을 권장합니다.
#hostingforum.kr
php
$mysqli = new mysqli("localhost", "username", "password", "database");
$stmt = $mysqli->prepare("INSERT INTO users (name) VALUES (?)");
$name = "John' OR 1=1 --";
$stmt->bind_param("s", $name);
$stmt->execute();
$stmt->close();
$mysqli->close();
prepared statement를 사용하면, SQL 인젝션 공격을 막을 수 있습니다.
2025-07-24 16:17