SQL 삽입
위키백과, 우리 모두의 백과사전.
SQL 삽입(영어: SQL Injection, SQL 인젝션, SQL 주입)은 응용프로그램 보안 상의 허점을 의도적으로 이용해, 개발자가 생각지 못한 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 공격 방법이다.
[편집] 예
다음과 같이 사용자의 아이디와 비밀번호를 확인하고 일치하면 로그인을 하는 PHP 프로그램이 있다고 하자.
$result = mysql_query("SELECT * FROM member WHERE ID='$id' AND PW='$pw'"); if(mysql_num_rows($result)) { // 로그인 성공 } else { // 사용자의 아이디와 비밀번호가 틀리므로 로그인 실패 }
일반적인 경우에 위 코드가 어떻게 동작할 지 예상할 수 있을 것이다.
하지만 $id에 ' OR '1'='1' --와 같은 값이 들어간다고 하면 SQL 쿼리문은 아래와 같이 된다.
SELECT * FROM member WHERE ID='' OR '1'='1' -- AND PW='$pw'
결과적으로 무조건 로그인이 성공하게 된다.
이를 해결하는 방법은 다음과 같이 $id와 $pw를 SQL에 맞게 인코딩 하면 된다.
$id = mysql_real_escape_string($id); $pw = mysql_real_escape_string($pw); $result = mysql_query("SELECT * FROM member WHERE ID='$id' AND PW='$pw'"); if(mysql_num_rows($result)) { // 로그인 성공 } else { // 사용자의 아이디와 비밀번호가 틀리므로 로그인 실패 }
이제 $id와 $pw에 어떤 값이 들어가도 아무 문제가 발생하지 않게 된다.