티스토리 뷰
SQL Injection 이란?
악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.
2017년 3월에 일어난 "여기어때" 의 대규모 개인정보 유출 사건도 SQL Injectrion 으로 인해 피해가 발생하였다.
SQL Injectrion 공격은 공격은 쉬운데, 이로 인한 파급효과는 매우크다. 그렇다면 JPA는 SQL Injection 으로 부터 안전할까?
SQL Injection 방어하는법
PreparedStatement 사용
Prepared Statement를 사용하면 인자를 넣어주기 전의 쿼리를 DBMS가 미리 컴파일하여 대기하므로 이후, 인자에 대해서는 쿼리가 아닌 단순 문자열로 인식하기 때문에 안전하다.
JPA는 SQL Injection으로 부터 안전할까?
Spring Data JPA에서는 구현체로 Hibernate를 사용하고있다.
Hibernate는 항상 Prepared Statement를 사용하고있기때문에 SQL Injection으로 부터 안전하다고 볼수있습니다.
String query = "SELECT * FROM users WHERE userid ='"+ userid + "'" + " AND password='" + password + "'";
PreparedStatement stmt = connection.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
하지만 Parameter Binding을 사용하지 않고 위와 같이 문자열 연결을 통한 동적 쿼리를 사용한다면 SQL Injection 공격에 취약할 수 있습니다.
https://discourse.hibernate.org/t/is-criteriaapi-query-prone-to-sql-injection/6686/2
'jpa' 카테고리의 다른 글
코틀린답게 JPA Entity 작성하기 (0) | 2023.11.02 |
---|---|
JPA 저장은 ID, 조회는 객체로 사용하는법 (0) | 2023.10.10 |
JPA Auditing 생성시간/수정시간 자동화 (0) | 2023.10.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- @FormProperty
- JPA SQL Injection
- defer-datasource-initialization
- WebFlux 의존성
- BasicBinder
- HTTPInterface
- 유저 스토리
- CreatedDate
- feignClient
- 구글 OpenID
- org.springframework:spring-webflux
- ValidateException
- entity 검증
- setDateFormat
- HandlesTypes
- java 17
- Spring Boot 3
- ServletContainerInitializer
- FormProperty
- @Converter
- dto 검증
- Attribute Converter
- 구글 소셜로그인
- dto 위치
- CreationTimestamp
- 유저 시나리오
- DispatcherServletInitializer
- 레이어드 아키텍처
- @ElementCollection
- User Scenario
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함