mysql_query()에서 안전하도록 현재 문자의 연결 설정을 고려하여 unescaped_string에서 특수 문자를 이스케이프합니다. 바이너리 데이터를 삽입하려면 이 함수를 사용해야 합니다.
다음 캐릭터가 영향을 받습니다:
성공하면 함수는 이스케이프된 문자열을 반환합니다. 실패하면 false를 반환합니다.
mysql_real_escape_string(string,connection)
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
설명
이 함수는 문자열의 특수 문자를 이스케이프하고 연결의 현재 문자 집합을 고려하므로 mysql_query()와 함께 사용하는 것이 안전합니다.
팁 및 참고 사항
팁: 이 기능을 사용하면 데이터베이스 공격을 방지할 수 있습니다.
예
예시 1
// 사용자 이름과 비밀번호를 가져오는 코드
// SQL에서 사용하기 위해 사용자 이름과 비밀번호를 이스케이프합니다.
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "'"
//추가 코드
mysql_close($con);
?>
예시 2
데이터베이스 공격. 이 예는 사용자 이름과 비밀번호에 mysql_real_escape_string() 함수를 적용하지 않으면 어떤 일이 발생하는지 보여줍니다.
$sql = "SELECT * FROM 사용자
WHERE user='{$_POST['user']}'
AND 비밀번호='{$_POST['pwd']}'";
mysql_query($sql);
// 사용자 이름과 비밀번호를 확인하지 않습니다.
// 다음과 같이 사용자가 입력한 모든 항목일 수 있습니다.
$_POST['user'] = 'john';
$_POST['pwd '] = "' 또는 ''='";
// 일부 코드...
mysql_close($con);
?>
그러면 SQL 쿼리는 다음과 같습니다.
SELECT * FROM users
WHERE user='john' AND 비밀번호='' OR ''='' 이는 모든 사용자가 유효한 비밀번호를 입력하지 않고도 로그인할 수 있음을 의미합니다.
예 3
데이터베이스 공격을 예방하는 올바른 방법:
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('연결할 수 없습니다: ' . mysql_error()) ;
}
// 보안 SQL 수행
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = " SELECT *
user=$user AND 비밀번호=$pwd";
mysql_query($sql);
mysql_close($con);
?>