회사 업무를 진행하다 보면 업무의 효율성을 위해 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 |
댓글