라이브러리

[PHP] mysqli::real_escape_string - 연결의 현재 문자 집합을 고려하여 SQL 명령문에서 사용할 문자열의 특수 문자를 이스케이프합니다.




mysqli::real_escape_string

`mysqli::real_escape_string`은 MySQLi 확장의 함수 중 하나로, 사용자 입력 데이터를 MySQL 쿼리에 안전하게 삽입할 수 있도록 도와줍니다. 이 함수는 SQL 인젝션 공격을 방지하기 위해 사용됩니다.

SQL 인젝션 공격

SQL 인젝션 공격은 사용자 입력 데이터가 MySQL 쿼리에 삽입되어 공격자가 원하는 쿼리를 실행할 수 있도록 하는 공격입니다. 예를 들어, 사용자 입력 데이터가 다음과 같이 쿼리에 삽입된 경우:

#hostingforum.kr
php

$username = $_POST['username'];

$query = "SELECT * FROM users WHERE username = '$username'";



공격자가 `username` 필드에 `' OR 1=1 --`를 입력하면, 쿼리는 다음과 같이 변경됩니다:

#hostingforum.kr
sql

SELECT * FROM users WHERE username = '' OR 1=1 --'



이 쿼리는 모든 사용자를 반환하게 됩니다. 이와 같은 공격을 방지하기 위해 `mysqli::real_escape_string` 함수를 사용합니다.

mysqli::real_escape_string 사용 예제

#hostingforum.kr
php

// MySQLi 연결 설정

$mysqli = new mysqli('localhost', 'username', 'password', 'database');



// 사용자 입력 데이터

$username = $_POST['username'];



// 사용자 입력 데이터를 안전하게 삽입

$username = $mysqli->real_escape_string($username);



// 쿼리 실행

$query = "SELECT * FROM users WHERE username = '$username'";

$result = $mysqli->query($query);



// 결과 출력

while ($row = $result->fetch_assoc()) {

    echo $row['username'] . "
";

}



mysqli::real_escape_string 사용 시 주의점

`mysqli::real_escape_string` 함수를 사용할 때 주의할 점은 다음과 같습니다.

* 이 함수는 MySQLi 확장의 함수이므로, MySQLi 확장을 사용하는 경우에만 사용할 수 있습니다.
* 이 함수는 사용자 입력 데이터를 안전하게 삽입할 수 있도록 도와줍니다. 그러나, 이 함수만으로는 모든 SQL 인젝션 공격을 방지할 수 없습니다. 다른 보안 대책도 함께 사용해야 합니다.
* 이 함수는 MySQLi 확장의 버전 4.1.0부터 사용할 수 있습니다.

mysqli::real_escape_string 대체

`mysqli::real_escape_string` 함수는 MySQLi 확장의 버전 5.3.0부터는 사용되지 않습니다. 대신, `mysqli_stmt::bind_param` 함수를 사용하여 쿼리 매개변수를 안전하게 삽입할 수 있습니다.

#hostingforum.kr
php

// MySQLi 연결 설정

$mysqli = new mysqli('localhost', 'username', 'password', 'database');



// 쿼리 준비

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");



// 쿼리 매개변수 바인딩

$stmt->bind_param("s", $username);



// 사용자 입력 데이터

$username = $_POST['username'];



// 쿼리 실행

$stmt->execute();



// 결과 출력

$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {

    echo $row['username'] . "
";

}



이 예제에서, `mysqli_stmt::bind_param` 함수를 사용하여 쿼리 매개변수를 안전하게 삽입했습니다. 이 함수는 사용자 입력 데이터를 안전하게 삽입할 수 있도록 도와줍니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 10,077건 / 380 페이지

검색

게시물 검색