웹페이지에서 암호와 아이디를 묻고 로그인을 하게 된다.
아이디와 암호를 몰라도 로그인 할 수 있다면 어떨까?
인증에 대해 허술하게 관리한 페이지를 오픈하는 방법 중에
SQL 인젝션이라는 것이 있다.
PHP를 예로 들어본다.
보안에 문외한 사이트 개발자는 아이디와 암호를 이렇게 받을 것이다...
<login.html>
form method=POST action=login.php
input type=text name=id
input type=password name=pw
<login.php>
SQL_Query = "
SELECT count(*)
FROM members
WHERE userid LIKE '$id' AND userpass LIKE '$pw'
";
결과값 = 참(1) 로그인 성공 ---> 쿠키생성
결과값 = 거짓(0) 로그인 실패 ---> 다시 login.html 호출
평범한 알고리즘에 무슨 문제가 있겠냐 싶지만...
SQL Injection 은 저 쿼리 생성시의 문제를 이용한 것이다.
id, password 를 다음과 같이 입력했다고 가정하자.
#1. 정상적인 액세스
id= admin
pw= qwerty
SELECT count(*)
FROM members
WHERE userid LIKE 'admin' AND userpass LIKE 'qwerty'
#2. SQL 인젝션
id= ' OR '1
pw= '
SELECT count(*)
FROM members
WHERE userid LIKE '' OR '1' AND userpass LIKE '''
과 같이 SQL 문이 변경되어 버린다.
참을 돌려주므로 로그인은 무사통과가 되는 셈...
단, SQL인젝션은 하나의 정해진 공식이 없다.
이래도 되고, 저래도 안되는 경우가 있다.
''' 를 통과 시키지 못하는 DBMS가 있을 수도 있으므로...
머리속으로 SQL 쿼리를 그리면서 시도해야 한다.