본문 바로가기
개발

[ibatis/MyBatis] #{}과 ${} 차이

by the red 2022. 1. 24.

 

회사 업무를 진행하다 보면 업무의 효율성을 위해 ibatis/MyBatis를 사용하게 되는데

 

파라미터에 #또는 $를 이용하는 경우가 있는데 #{}과 ${} 차이를 모르고 사용하는 경우가 대부분이다.

 

ex 1)

 select  mb_no  
   from mb_profile 
 where mb_no = #{mb_no} 

 

ex 2)

 select  mb_no  
   from mb_profile 
 where mb_no = ${mb_no}

 

ex1과 ex2의 차이는 무엇일까?

#{}을 사용하는 경우, 파라미터가 String 형태로 들어와 'string' 형태로 회원번호를 조회하게 된다.

***보안상으로 쿼리 주입을 예방할 수 있다. 

 

${}을 사용하는 경우, 컬럼의 자료형에 맞추어 파라미터가 바로 출력된다.

***${}의 문제점

취약점을 발견하고 특정 게시판 또는 회원정보 조회 화면에서 파라미터로 '; drop table ~ 또는 '; delete table ~ 이런 형태로 파라미터를 날리는 경우 해당 컬럼 중 ${}이 있다며, 해당 명령어가 정상적으로 실행된다.

 

 #{}과 ${} 중 무엇을 사용할지 결정은 개발자가 판단하여 사용하나 대형 프로젝트의 경우 보안상 취약한 코드는 사용 못하게 권고하고 있어서 작업한 쿼리를 전부 수정하고 다시 테스트하는 상황이 올 수도 있다.  투입된 프로젝트 상황에 맞추어 작업하고 보안에 취약하지 않는 방법 안에서 코딩을 진행하면 된다. 

 

 

 

 

 

'개발' 카테고리의 다른 글

구글 애널리틱스 이벤트 테스트  (0) 2022.04.16
[ibatis] 비교 표현식  (0) 2022.01.21
ibatis/MyBatis TypeException  (0) 2022.01.21

댓글