SQL Injection
SQL Injection은 입력 값에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 파라미터에 쿼리문을 조작하여 정보를 열람하거나 데이터를 조작할 수 있는 해킹 기술이다.
SQL Injection 예시
1. 안전하지 않은 코드
예시 코드를 보면 외부 입력(gubun)을 아무런 검증 없이 바로 쿼리문에 집어넣고 있다.
이때, 외부 입력(gubun)이 ' OR '1'='1 과 같이 들어오게 된다면, 전체 쿼리문은 아래와 같이 만들어진다.
"SELECT * FROM board WHERE b_gubun = '' OR '1' = '1'";
개발자가 어떤 조건을 걸어놨던 간에 OR '1' = '1'이라는 구문이 추가되어 항상 참이 되는 SQL문이 탄생한다.
실행 결과
위와 같은 쿼리문이 동작하면 쿼리문에 해당하는 테이블 내의 데이터가 모두 조회된다.
이를 방지하기 위해서 입력 값에 대한 검증이 필요하다.
2. 안전한 코드
자바에선 PreparedStatement를 사용하면 SQL Injection에 대응할 수 있다. PreparedStatement의 setObject(), setString() ... 등의 메소드 내에서 입력 값에 대한 이스케이프 처리를 해주기 때문이다.
이스케이프 처리가 된 입력은 더 이상 SQL문 내에서 문법적인 의미를 가질 수 없게 되므로 안전하다.
'Secure Coding > SQL Injection' 카테고리의 다른 글
[ Secure Coding ] SQL Injection (SQL 인젝션) PreparedStatement, Statement- Java (2) (0) | 2023.01.31 |
---|