■ SQL Injection
공격자가 악의적인 의도를 갖는 SQL 구문을 삽입하여, 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법 |
▶ 해커의 해킹 방식
//아래의 SQL문에 항상 참인 값을 넣으면 모든 정보가 노출이된다.
String sql = "SELECT * FROM test_member WHERE id = 'test' AND pwd = '1234'" + "or 1 = 1";
- 위와 같은 방식으로 SQL구문을 삽입하여 DB를 조작하는 공격을 SQL 인젝션이라 한다.
- 해결 방법 : PreparedStatement를 사용한다.
■ Statement와 PreparedStatment의 차이점
Statement | PreparedStatement | |
차이점 | 캐시 미사용 | 캐시 사용 |
절차 | 쿼리 문장 분석 컴파일 실행 --> 계속해서 위 세단계를 반복 |
쿼리 문장 분석 컴파일 실행 -> 처음 한번만, 캐시에 담아 재사용 |
결론 | 보안 낮음, 성능 낮음 | 보안 높음, 성능 높음 |
■ PreparedStatement로 JDBC프로그래밍 하는 순서
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class _00_preparedStatement {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 정보를 찾을 수 없습니다.");
}
}
public static void main(String[] args) throws Exception{
//1. 연결
String url = " /* url 정보 */";
String user = "계정명";
String pwd = "비밀번호";
Connection conn = DriverManager.getConnection(url, user, pwd);
//2. preparedStatement
//1) SQL문에 '?'를 넣어 값을 넣을 parameter를 형성
// parameter index 1 2
// id = ? pwd = ?
String sql = "SELECT * FROM test_member WHERE id = ? AND pwd = ?";
//2) PreparedStatement안에 SQL문을 넣기
PreparedStatement pstmt = conn.prepareStatement(sql);
//3) SQL문의 parameter를 세팅한다.
pstmt.setString(1, "사용자 아이디");
pstmt.setString(2, "사용자 비밀번호");
//3. 처리
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
String password = rs.getString("pwd");
System.out.printf("[%s]님의 아이디는 %s, 비밀번호는 %s\n",name,id,password);
}
//4. 닫기
rs.close();
pstmt.close();
conn.close();
}//end main
}
- 출처:
- SQL인젝션 개념 https://dev-coco.tistory.com/158 [슬기로운 개발생활😃]
- 캐시에 대한 자세한 내용 https://p829911.tistory.com/11
- 그 외 ) 국비지원 수업 과정
- 참고 : 여기어때의 해킹 사건 https://show-me-the-money.tistory.com/entry/%EC%97%AC%EA%B8%B0-%EC%96%B4%EB%95%8C-%ED%95%B4%ED%82%B9-%EC%82%AC%EA%B1%B4%EC%9D%84-%ED%8C%8C%ED%97%A4%EC%B9%98%EB%8B%A4
'Language > SQL' 카테고리의 다른 글
[DATABASE] MVC 모델 구현 _ 성적 관리 프로그램 (0) | 2022.04.25 |
---|---|
[DATABASE] 자바를 통한 DB 모듈화 (0) | 2022.04.23 |
[DATABASE] JAVA프로그램과 DB 연결하기 (0) | 2022.04.21 |
[DATABASE] JOIN (0) | 2022.04.21 |
[DATABASE] SEQUENCE, INDEX (0) | 2022.04.21 |