Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

의미없는 블로그

Spring Data JPA 에서 SQL Injection 본문

# 나/pentest (WEB)

Spring Data JPA 에서 SQL Injection

SaltLee 2022. 10. 6. 11:34

JPA 란 DB 관련된 자바 API 라고 생각하면 편할거 같다

Spring Data JPA 는 Spring 환경에서 JPA 를 사용해서 DB 구현하는거라 보면 될거같공..

 

무튼 JPA 사용해서 DB 구현하는 방식 찾아보면 공통적으로 하는 말이 'SQL 쿼리문을 직접 작성하지 않는다' 고 한다 

 

뭔소린가 했더니 코드를 구현할 때

String sql = insert into user(%s, %s, %d) value(id, passwd, age); 이런식으로 쓰는게 아니고

setId(), setPasswd(), setAge() 이런식으로 객체를 만들어서 쓴다

 

그래서 장점 중에 쿼리를 수정 안해도 되니까 Oracle, Mssql, Mysql 등 여러 DB 를 사용할 때 문법 걱정이 없다고 한다

 

테스트 해볼 수 있는 코드가 있는데 일단 환경 세팅(이클립스, MySQL Workbench)이 먼저 필요쓰..

- 테스트 코드 출처 : https://loy124.tistory.com/195?category=767138

- 환경 세팅 : https://saltlee.tistory.com/242

 

소스코드 잘 몰라서 그냥 대략 어떤 느낌인지만..

properties 파일에는 DB 연동 해주고

getId(), setID() 등으로 DB에 데이터 get(select), set(create) 할 수 있도록 작성

setAccount(), setEmail() 등으로 DB에 데이터 set 한다

프로젝트 실행시키고(Run as Junit Test) DB 조회해보면 데이터 들어가 있다

 

무튼 이런식으로 굴러간다고 보면 되겠고..

 

Spring Data JPA 에서 SQL Injection 이 발생할 수 있느냐? 하는 것에 대해서는

네이티브 쿼리 방식이라고 해서 말 그대로 쿼리를 그대로 갖다 쓰는 경우에는 취약하다고 할 수 있겠다 ↓ 요렇게

근데 네이티브 쿼리 방식도 '파라미터 바인딩' 이라고 파라미터 값을 매핑해서 사용하는 방식으로 쓰면

PreparedStatement 쓰는것처럼 동작해서 안전하다고 한다

 

참고 : https://stackoverflow.com/questions/41661193/is-spring-data-jpa-safe-against-sql-injection

참고 : https://blog.voidmainvoid.net/173

참고 : https://ssdragon.tistory.com/m/98 (이거 좋음)

Comments