1. #{}
#{}사용시 mybatis 가 preparedStatement 를 생성하고, preparedStatement 매개변수 #{?} 값을 안전하게 셋팅하게 한다.
#{param} 값을 'param' 과 같이 ''로 감싸며 치환한다.
SQL injection 과 같은 공격을 방지할 수 있다. 더 빠르고, 안전하다.
1
2
3
4
5
|
SELECT *
FROM user_info
WHERE 1=1
AND id = #{id} -- #{id} >> 'developyo@tistory.com'
AND pw = #{pw} -- #{pw} >> '1234'
|
cs |
2. ${}
${} 사용시 ${param} 값을 param 과 같이 '' 로 감싸지 않은채 치환한다.
SQL injection 과 같은 공격을 받을 수 있다.
직접적인 값 셋팅(ORDER BY 절의 기준 칼럼을 동적으로 지정하고 싶은 경우 등)이 필요한 경우 사용할 수 있다.
1
2
3
|
SELECT *
FROM user_info
ORDER BY ${columnName} -- ${columnName} >> join_date
|
cs |
[ SQL injection 공격의 예 ]
1. #{} 사용
id 파라미터로 developyo@tistory.com
pw 파라미터로 '1' OR 1=1
1
2
3
4
5
|
SELECT *
FROM user_info
WHERE 1=1
AND id = 'developyo@tistory.com'
AND pw = ''1' OR 1=1'
|
cs |
: sql Exception 발생
2. ${} 사용
id 파라미터로 'developyo@tistory.com'
pw 파라미터로 '1' OR 1=1
1
2
3
4
5
|
SELECT *
FROM user_info
WHERE 1=1
AND id = 'developyo@tistory.com'
AND pw = '1' OR 1=1
|
cs |
: 조회 성공
※ 만약 ${}을 사용할 경우 SQL injection 공격을 막기위해 이스케이프 처리가 필요하다.
참고 : https://stackoverflow.com/questions/39954300/when-to-use-vs
반응형
'back > Mybatis,Ibatis' 카테고리의 다른 글
[mybatis] xml에서 java method 사용 (0) | 2020.08.24 |
---|---|
[Mybatis] 동적쿼리 (if test) 문자열처리 (4) | 2020.03.27 |
[Ibatis] dtd 경로 문제 (1) | 2019.12.30 |
[Mybatis] like 조건시 문자열 처리 (1) | 2019.02.13 |