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$pwSQL에 맞게 인코딩 하면 된다.

$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에 어떤 값이 들어가도 아무 문제가 발생하지 않게 된다.