취약점 진단/WEB
JSP 취약점 분석 - SQL injection (PreparedStatement)
DoR@Hee
2019. 2. 1. 00:07
1. SQL 인젝션이란?
Web Hacking 기법으로써 Database에 쿼리문(질의문)을 넣는 과정에서 데이터를 임의적으로 조작 원하는 SQL 구문을 실행하는 기법
여기서
일반적인 Sql DBMS 내부적인 과정(parse, bind, execute, fetch)을 거치게 된다. >> Statement 객체 사용 시
여기서 일반적인 Statement를 사용하여 Select문을 입력했을 때에는 매번 모든 과정을 수행한다(parse > patch)
그러나 PreparedStatement 객체를 사용할 경우 효율을 높이기 위해 최초 1번만 수행하고 이후에는 생략이 가능하다. parse 모두 거친 후에 생성된 결과는 메모리에 저장해두고 필요할 때 사용한다. 반복적으로 사용하기 위해 자주 변경되는 부분을 변수(?)로 선언해두고 매번 다른 값을 바인딩 하여 사용한다. 바인딩 데이터는 SQL 문법이 아닌 내부의 인터프리터나 컴파일 언어로 처리하기 때문에 문법적인 의미를 가질 수 없으며 바인딩 변수를 사용하였을 때 쿼리의 문법 처리 과정이 미리 선 수행하기 떄문에 바인딩 데이터는 SQL 문법적인 의미를 가질 수 없다.
결론 : SQL injection에서 안전하고 싶다면 PreparedStatement 객체를 사용하자