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 Mybatis 에서 SQL Injection 본문

# 나/pentest (WEB)

Spring Mybatis 에서 SQL Injection

SaltLee 2022. 10. 11. 12:22

Mybatis 랑 JPA 를 많이 비교하는 듯 하다

 

예전에는 SQL 문과 코드가 섞여 있었다면

얘네는 SQL 문을 분리해서 관리한다는 특징이 있어서 많이 쓰는것 같다

 

Mybatis 는 SQL 문을 따로 XML 로 분리해서 가지고 있는데

SQL 문 갖다 쓰려면 Java 코드랑 SQL 문을 직접 매핑해줘야 한다고 함

 

이게 원래 사용하던 SQL 문과 PreparedStatement 사용해서 처리하던 방식

이거 Mabatis 방식인데 아래 XML 에 있는 SQL 문을 위에 DAO 에서 갖다 쓰는 방식

이게 JPA 방식 SQL 문 없이 걍 setName() 으로 DB 에 저장해버리는

↑ 참고 : https://ss-o.tistory.com/159

 

무튼 그렇고.. 자세한건 소스 보다보면 알게 되겠지

Mybatis 에서 SQL Injection 은 너무 유명한.. ${ } 에서 발생하는데($ql Injection 이라고 외워야겠다)

 

XML 에서 SQL 문에 대한 파라미터 선언 시 ${ } 로 선언하면

파라미터 값이 그대로 SQL 문에 들어와서 인젝션 가능성이 존재하는 것이다

#{ } 로 선언하면 따옴표가 붙은 string 형태로 들어와서 안전하다고 함(PreparedStatement 처럼 되는 것)

↑ 참고 : https://theheydaze.tistory.com/587

 

근데 ${ } 를 왜 쓰냐?

order by 같은 경우 order by "id" 이렇게 따옴표가 붙으면 안먹혀서 ${ } 를 쓸 수 밖에 없다고 함

그러면 이럴 때는 어찌 하냐

머 필터링 하는 그런게 있나 보다 

↑ 참고 : https://www.hanumoka.net/2019/09/21/spring-20190921-spring-mybatis-sqlinjectionsafe/ 

 

팀장님이 $ 달러 말고 다른말 찾아보라 하셨는뎅 뭔지 모르겠음

걍 # 는 PreparedStatement, $ 는 Statement 이건가?

 

'# 나 > pentest (WEB)' 카테고리의 다른 글

DLP 우회?  (0) 2022.10.11
React & Vue  (0) 2022.10.11
취약점 진단 왜 하냐?  (1) 2022.10.06
이클립스 Spring Project & MySQL Workbench 세팅  (0) 2022.10.06
Spring Data JPA 에서 SQL Injection  (1) 2022.10.06
Comments