의미없는 블로그
Spring Mybatis 에서 SQL Injection 본문
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 |