MyBatis #{} ${} 차이

|
SELECT	PROFILES_ACTIVE
        , USER_ID
        , SESSION_ID
        , INSTANCE_ID
        , IN_DATE
FROM   	SFI_LOGIN_SESSION
WHERE	PROFILES_ACTIVE = '${profilesActive}'

${}

- 파라미터가 바로 출력됨 (Statement)

- 해당 컬럼의 자료형에 맞추어 파라미터의 자료형이 변경됨

- 쿼리 주입(SQL Injection)을 예방할 수 없어 보안에서 불리. (사용자 입력을 전달할때는 사용x)

- 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용 ( #{} 은 ' ' 가 자동으로 붙음 )

 

SELECT	PROFILES_ACTIVE
        , USER_ID
        , SESSION_ID
        , INSTANCE_ID
        , IN_DATE
FROM   	SFI_LOGIN_SESSION
WHERE	PROFILES_ACTIVE = #{profilesActive}

#{}

- 파라미터가 string 형태로 들어옴

- 쿼리 주입을 예방할 수 있어 보안 측면에서 유리 (PreparedStatement)

 

SELECT * FROM MEMBER WHERE ID = ''or 1=1--' and PW = '아무거나입력'

SQL Injection

- WHERE 절을 강제로 참으로 만들어 SQL을 조작

- `'or 1=1` 입력을 통해 참이 됨

 

'DATABASE(SQL)' 카테고리의 다른 글

MYSQL DEFINER  (0) 2023.04.27
SQL 네이밍 규칙  (0) 2023.04.12
DML DDL DCL  (0) 2022.12.20
Oracle Tablespace  (0) 2022.12.20
Oracle Synonym  (0) 2022.12.20
And