SQL Injection

김호성👨🏽‍💻·2021년 10월 12일
1

웹 보안

목록 보기
1/2
post-thumbnail

SQL Injection 은 말 그대로 SQL 구문의 취약점을 이용하여 공격하는 방식입니다.
예를 들어 로그인시 해당 유저의 아이디와 패스워드가 맞는지 검사하기 위해 아래와 같은 구문을 사용할 것으로 생각됩니다.

//SELECT * FROM USER WHERER ID='' AND PW ='';

만약 아이디 입력창에 TESTID' 를 입력하게 되면 '가 하나 더찍혀서 오류
//SELECT * FROM USER WHERER ID='TESTID'' AND PW ='';

만약 아이디 입력창에 ' or 1=1# 를 입력하게 되면 # 뒤로 주석처리 되어서 전체 데이터가 출력되어 로그인이 될수 있습니다.
//SELECT * FROM USER WHERER ID='' or 1=1#' AND PW ='';

그 외 여러가지 sql injection 방법들이 있습니다. 이러한 부분을 조금이라도 해결하기 위해서는 Statement 클래스가 아닌
PreparedStatement 를 사용하여
해당 아이디와 패스워드를 인자값으로 받아서 위와 같은 부분을 해결할수 있었습니다.
(해당 테스트는 Mysql, Eclipse, JDBC 사용하였습니다.)

//SQL Injection 방지
PreparedStatement stmt = con.prepareStatement("select * from member where id=? and pw=?");
stmt.setString(1, id);
stmt.setString(2, pw);

0개의 댓글