◆ PART · DB

SQL 인젝션 직접 시연

Spring 기초
SMHRD

학습 목표

1. 문제

"#{} 와 ${} 의 차이가 뭐예요?" — 잘못 쓰면 보안 사고.

2. 새 도구

두 파라미터 표기법: #{} = 안전한 PreparedStatement (값을 따옴표로 감쌈). ${} = 위험한 문자열 치환 (그대로 끼워넣음).

3. 코드

<!-- 위험한 코드 (Demo 용) --> <select id="login" resultType="com.smhrd.domain.Member"> SELECT * FROM mymember WHERE id = '${id}' AND pwd = '${pwd}' </select> -- 공격 입력: id = "admin' OR '1'='1" → 완성된 SQL: SELECT * FROM mymember WHERE id='admin' OR '1'='1' AND pwd='...' → 누구나 admin 으로 로그인 가능! <!-- 안전한 코드 --> <select id="login" resultType="com.smhrd.domain.Member"> SELECT * FROM mymember WHERE id = #{id} AND pwd = #{pwd} </select>

4. 정리

5. Before / After

전 차시

"#{} 와 ${} 의 차이가 뭐예요?" — 잘못 쓰면 보안 사고.

이번 차시

`#{}` 만 쓰는 습관이 들어 있다. `${}` 는 정렬 컬럼 같은 특수 경우만.

학습 확인 체크리스트