DoR@Hee의 끄적끄적
JSP 취약점 분석 - SQL injection (PreparedStatement) 본문
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 객체를 사용하자
'취약점 진단 > WEB' 카테고리의 다른 글
mysql - information_schema (0) | 2019.03.26 |
---|---|
Blind Sql Injection -값 길이, 값 가져오기 (0) | 2019.03.25 |
Blind Sql Injection - 칼럼 길이, 이름 가져오기 (0) | 2019.03.18 |
Blind Sql Injection - 테이블 길이, 이름 가져오기 (0) | 2019.03.18 |
Blind Sql Injection - 데이터베이스 이름 가져오기 (2) | 2019.03.18 |