마이바티스에서 변수를 쿼리문에 입력하려고 할때 사용하는 표현식입니다.

 

변수의 타입에 맞게 타입변환 후 삽입

 

변수를  SQL 문에 그대로 삽입

 

 

/* 아래 두가지 방식이 있고 사용자가 입력값을 문자열 형식으로 사용자1 이라고 입력할 경우 */

SELECT * FROM TB_USER WHERE user_id = #{id}
쿼리문 실행 시 => SELECT * FROM TB_USER WHERE user_id = '사용자1'
/* id 변수의 타입(정수,문자열..)에 따라 타입변환 후 입력 */

SELECT * FROM TB_USER WHERE user_id = ${id}
쿼리문 실행 시 => SELECT * FROM TB_USER WHERE user_id = 사용자1
/* id 변수의 값이 입력된 그대로 입력 */
/* 그래서 $는 변수에 문자열이 입력되는 경우에는 '${id}' 처럼 별도로 ' '로 감싸줘야 함 */

 

 

두가지 방식중에 가급적 사용을 권장하는데 그 이유는

 

를 사용하는 경우 사용자가 입력한 값을 그대로 쿼리문에 포함시켜서 SQL Injection 공격에 취약할 수 있습니다

 

예를 들면 아래 예시처럼 사용자가 악의적으로 id 값에 "" OR 1=1 과 같이 값을 입력하게 되면

 

id 값을 조건으로 result가 id 값에 매칭되는 특정 row 가 아닌 해당 테이블의 전체 row 가 조회될 수 있습니다

 

 

SELECT * FROM TB_USER WHERE user_id = ${id}

/* id 입력값에 "" OR 1=1 를 입력한 경우 */

SELECT * FROM TB_USER WHERE user_id = "" OR 1=1

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기