
SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다. 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격입니다.
우선 예를들어, 아래와 같이 관리자 페이자가 따로 있다고 가정해봅시다. 해당 관리자 페이지에 접속하기 전에, 현재 유저가 관리자의 권한을 가지고 있는 검증하는 로직이 필요합니다!

select * from User WHERE auth = 'admin' AND id = 'mw310'
좀 더 정확히 말하자면, 위 SQL 구문은 권한(auth 필드)이 관리자(admin)이면서 아이디가 mw310인 유저를 찾습니다.
이때 외부로 부터 입력받은 데이터는 'admin' 과 'mw310' 입니다.
그런데 만일 외부 입력으로 "im not admin" 과 " 'OR '1' = '1 " 을 입력받으면 어떻게 될까요? 즉 아래와 같은 SQL 문이 실행되는 상황을 가정해봅시다.
select * from User WHERE auth = 'im not admin' AND id = ' ' OR '1' = '1'
id값이 스페이스가 아니거나 1이 1과 같은 경우라고 where를 걸어버리면 무조건 참이 나올수 밖에 없습니다.
즉 외부 입력으로 그 어떠한 auth를 입력받고, id 입력을 받아오는지와 상관없이 '1' = '1'라는 구문에 의해서 해커는 관리자 계정의 User 테이블의 모든 필드 정보를 얻을 수 있습니다.