[Mybatis] Mybatis #,$ 차이


시큐어코딩중 ${} 문법을 #{}로 변경하라는 보안조치가 내려왔다.

파라미터 작성법을 다시 한번 정리해보자.

#{}

  • 파라미터가 String 형태로 들어온다. user_nm 값이 홍길동 이라면 user_nm=’홍길동’ 형태가 된다. ex) user_nm = #{user_nm} -> user_nm=’홍길동’
  • 쿼리 주입(SQL Injection) 을 예방할수 있다.

쿼리주입(SQL Injection)

  • 임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정삭적인 동작을 취하도록 조작하는 행위

<select id='~~~'>
    select user_id , user_nm , user_age
    from   user
    where  user_id = #{user_id}
    and    user_nm = #{user_nm}
</select>

${}

  • 파라미터가 바로 출력
  • 해당 컬럼에 자료형에 맞춰 파라미터 자료형이 변경됨
  • 쿼리 주입을 예방 할수 없다.
  • 테이블이나, 컬럼명을 파라미터로 전달 하고 싶을때 사용

<select id='~~~'>
    select user_id , user_nm , user_age
    from   user
    order by ${ordr_nm} 
</select>






© 2017. by isme2n