#{ }
- 파라미터가 String 형태로 들어와서 '파라미터' 형태가 된다.
ex) id값이 aaa이면 id = #{id} 가 id='aaa' 로 들어간다.
- 쿼리 주입을 예방할 수 있어 보안측면에서 유리하다.
${ }
- 파라미터가 바로 출력된다.
- 해당 컬럼의 자료형에 맞춰 파라미터 자료형도 변경된다.
- 쿼리 주입을 예방할 수 없어 보안측면에서는 불리하다. 그리하여 사용자의 입력을 전달할 때는 사용하지 않는 것이 낫다.
- 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용한다.
쿼리주입 (SQL Injection)이란?
- 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위.
- 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격이다.
- ${}로 값이 주입 될 때는 데이터 값만이 아니라 적혀진 그대로 주입되기 때문에 보안상 취약하게 된다.
예를 들어,
select * form member where id ='${ id }' and password = '${ password }
라는 쿼리문에
id=' admin' --' 라는 값이 주입이 되면
select * form member where id = ' admin' --' and password = '${ password } 로 실행되어
관리자 계정으로 로그인 할 수 있게 된다.
'JAVA > SPRING' 카테고리의 다른 글
[SPRING] @Controller와 @RestController (0) | 2022.03.29 |
---|---|
[Spring] No mapping found for HTTP request with URI 에러 (0) | 2022.01.06 |
[Spring][Annotation] @RequestParam & @PathVariable (0) | 2022.01.04 |
[Spring][Spring Security]BCryptPasswordEncoder (0) | 2022.01.03 |
[spring][mybatis] 부적합한 열 유형 error (0) | 2021.12.31 |