MyBatis
🔥 취약한 이유 요약
@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);🧨 공격 예시
findByColumn("1=1 --", "irrelevant");SELECT * FROM user WHERE 1=1 -- = 'irrelevant'⚠️ @Select에서 ${} vs #{} 차이
@Select에서 ${} vs #{} 차이표현 방식
동작 방식
안전성
설명
✅ 안전한 대안
💡 핵심 요약
✅ 1. <sql> 과 <include>: 재사용 가능한 SQL 조각
<sql> 과 <include>: 재사용 가능한 SQL 조각📌 목적:
📄 예시 1: 컬럼 조각 재사용
🧠 설명:
📄 예시 2: 중첩 include와 매개변수 전달
🧠 설명:
✅ 2. Result Mapping: DB 컬럼명과 자바 필드명이 다를 때
📄 방법 1: SQL에서 직접 alias 사용
✅ 장점:
❌ 단점:
📄 방법 2: <resultMap> 사용
<resultMap> 사용✅ 장점:
🔁 총 정리
항목
설명
Last updated