SQL Injection
공격자가 입력이 가능한 폼에 조작된 질의문 삽입하여 디비 정보 열람 및 정보를 조작하는 공격
JPA는 sql injection에 무조건 안전한가?
JPA는 내부적으로 Prepared Statement를 사용하고 있어 sql injection에 안전하지만, 입력값을 바로 대입하는 방식의 native query는 안전하지 않다.
String queryString = "SELECT u FROM User u WHERE u.username = '" + userInput + "'";
Query query = entityManager.createQuery(queryString);
List<User> users = query.getResultList();
Prepared Statement 사용하면 안전한 이유
Prepared Statement를 사용하면 인자를 넣어주기 전의 쿼리를 DBMS가 미리 컴파일하여 대기하므로 이후, 인자에 대해서는 쿼리가 아닌 단순 문자열로 인식하기 때문에 안전하다.
이번 프로젝트에서는 native query를 작성하지 않았지만 작성하게 된다면 Prepared Statement을 꼭 사용해야겠다.
'부트모아' 카테고리의 다른 글
[V1] 사용자 인증 구현 (1) | 2024.09.28 |
---|---|
[V1] 셀프 조인을 통한 대댓글 구현 (1) | 2024.09.28 |
[V2] 부트모아 사이트 XSS 필터링 (1) | 2024.09.28 |
[V2] Spring Security CSRF (1) | 2024.09.28 |
[V2] Vault를 사용한 보안 강화 (1) | 2024.09.28 |