Real_escape_string 은 MySQLI 확장자의 메소드로, 주로 문자열에서 특수 문자를 피하는 데 사용되므로 악성 SQL 코드가 실행되는 것을 방지합니다. 위험한 캐릭터 전에 Backslash ( \ )를 자동으로 추가하여 SQL 구문에서 특별한 의미를 잃게됩니다.
사용자 입력이 SQL 문에 직접 접합되는 모든 상황에서는 입력 컨텐츠를 피해야합니다. 그렇지 않으면 공격자는 입력을 사용하여 악의적 진술을 구성하여 데이터베이스 작업의 논리를 변경할 수 있습니다.
다음은 real_escape_string을 사용하여 사용자 입력을 안전하게 처리하는 방법을 보여주는 간단한 예입니다.
<code> & lt;? php // mysqli connection 만들기 $ conn = new mysqli ( 'gitbox.net', 'username', 'password', 'database'); // 연결이 성공했는지 확인하십시오
if ($ conn-> connect_error) {
다이 ( "연결 실패 :". $ conn-> connect_error);
}
// 사용자가 양식을 통해 사용자 이름을 제출했다고 가정합니다.
$ user_input = $ _post [ 'username'];
// real_escape_string을 사용하여 사용자 입력을 피하십시오
$ safe_input = $ conn-> real_escape_string ($ user_input);
// SQL 쿼리 문을 작성합니다
$ sql = "사용자에서 username = '$ safe_input'";
// 쿼리를 실행합니다
$ result = $ conn-> query ($ sql);
if ($ result-> num_rows> 0) {
// 프로세스 쿼리 결과
while ($ row = $ result-> fetch_assoc ()) {
Echo "사용자 ID :". $ 행 [ "ID"]. " - 사용자 이름 :". $ 행 [ "사용자 이름"]. "<br>";
}
} 또 다른 {
Echo "일치하는 사용자는 찾을 수 없습니다.";
}
$ conn-> close ();
?>
</코드>
real_escape_string은 단일 따옴표 ( ' ), 이중 인용문 ( " ), 백 슬래시 ( \ ) 등과 같이 SQL 엔진에서 오해 할 수있는 문자열에서 문자를 식별 할 수 있으며, 이들이 문자가 SQL 문 구조의 특수한 중요성을 잃어 버리기 코드의 실행을 방지합니다.
연결이 설정되어 있어야합니다 . Real_escape_string은 데이터베이스 연결 상태에 따라 달라지며 연결 전에 호출되지 않아야합니다.
응용 범위 :이 기능은 문자열 탈출에만 적합하며 더 안전한 준비된 진술을 대체 할 수 없습니다.
전처리 명세서를 사용하는 것이 좋습니다 . real_escape_string 이 효과적이지만 SQL 쿼리의 경우 MySQLI 또는 PDO 의 전처리 문을 사용하는 것이 좋습니다.
관련 태그:
SQL