17. 다음 자바 프로그램은 SQL Injection 에 취약한 소스와 취약점을 해소한 소스코드 이다. ( )에 들어갈 코드를 작성하시오.
[취약한 소스코드]
1: // 외부로부터 입력받은 값을 검증 없이 사용할 경우 안전하지 않다.
2: String gubun = request.getParameter("gubun");
3: ......
4: String sql = "SELECT * FROM board WHERE b_gubun = '" + gubun + "'";
5: Connection con = db.getConnection();
6: Statement stmt = con.createStatement();
7: // 외부로부터 입력받은 값이 검증 또는 처리 없이 쿼리로 수행되어 안전하지 않다.
8: ResultSet rs = stmt.executeQuery(sql);
[취약점을 해소한 소스코드]
1: String gubun = request.getParameter("gubun");
2: ......
3: // 1. 사용자에 의해 외부로부터 입력받은 값은 안전하지 않을 수 있으므로, PreparedStatement
사용을 위해 ?문자로 바인딩 변수를 사용한다.
4: String sql = "SELECT * FROM board WHERE b_gubun = ( A )";
5: Connection con = db.getConnection();
6: // 2. PreparedStatement 사용한다.
7: PreparedStatement pstmt = con.( B )(sql);
8: //3.PreparedStatement 객체를 상수 스트링으로 생성하고, 파라미터 부분을 setString등의 메소드로
설정하여 안전하다.
9: pstmt.( C )(1, gubun);
10: ResultSet rs = pstmt.( D );
| 정답 확인 | 맞췄어요 O | 틀렸어요 X |
(B) prepareStatement
(C) setString
(D) executeQuery()