PHP mysql_real_escape_string() 함수
정의 및 사용법
mysql_real_escape_string() 함수는 SQL 문장에서 사용되는 문자열의 특수 문자를 대체합니다.
영향을 받는 문자는 다음과 같습니다:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
성공하면 이 함수는 대체된 문자열을 반환합니다. 실패하면 false를 반환합니다.
문법
mysql_real_escape_string(string,connection)
매개변수 | 설명 |
---|---|
string | 필수. 대체할 문자를 지정합니다. |
connection | 선택 사항. MySQL 연결을 지정합니다. 지정하지 않으면 가장 마지막 연결이 사용됩니다. |
설명
이 함수는 string 내부의 특수 문자를 대체하고, 현재 연결의 문자 집합을 고려하여 안전하게 사용할 수 있습니다. mysql_query().
ヒント 및コメント
ヒント:이 함수를 사용하여 데이터베이스 공격을 예방할 수 있습니다.
예제
예제 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 사용자 이름과 비밀번호를 얻는 코드 // 사용자 이름과 비밀번호를 표시하여 SQL에서 사용할 수 있게 합니다 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // 더 많은 코드 mysql_close($con); ?>
예제 2
데이터베이스 공격. 이 예제에서 mysql_real_escape_string() 함수를 사용하지 않으면 어떻게 될지 보여줍니다:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // 사용자 이름과 비밀번호를 확인하지 않습니다 // 사용자 입력의 어떤 내용이든 될 수 있습니다. 예를 들어: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // 일부 코드... mysql_close($con); ?>
그렇다면 SQL 쿼리는 이렇게 될 것입니다:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
이는 어떤 사용자도 합법적인 비밀번호를 입력하지 않고도 로그인할 수 있다는 것을 의미합니다.
예제 3
데이터베이스 공격을 예방하는 올바른 방법:
<?php function check_input($value) { // 슬래시 제거 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 숫자가 아니면 쌍따옴표 추가 if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 안전한 SQL 수행 $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>