인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kts327님의 프로필 이미지
kts327

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

정리

${} 사용시 sql 인젝션 이슈가 있다고 하셨는데요, 궁금한게 있습니다.

작성

·

442

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
${}가 sql인젝션으로 위험한 이유가 입력한 문자 그대로 전달되기 때문으로 이해했는데요
그래서 예제코드 작성해서 테스트 진행해 보았는데,
 
-mapper.xml-
  <select id="findByItemName" resultType="Item">
      select id, item_name, price, quantity
      from item
      where item_name = ${itemName}
  </select>
 -sql 수행 시-
select id, item_name, price, quantity
from item
where item_name = itemA
이런식으로 itemA가 따옴표 없이 파라미터를 넘기다보니 애초에 JdbcSQLSyntaxErrorException 에러가 발생합니다.
그래서, mapper.xml에서 '${itemName}' 이런식으로 따옴표를 강제로 붙이면 정상적으로 쿼리수행이 되더라구요
 
그럼 애초에 sql인젝션 위험요소가 없는 거 아닌가요?
문자열로 지정을 안하면 예외를 뱉고, 따옴표로 문자열로 강제하면, sql 인젝션 문구 전체가 문자열로 인식해서 쿼리보안상 문제가 없을 것 같은데 제가 모르는 부분이 있나 여쭤봅니다.
 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kts327님

다음 키워드로 검색해보시면 도움이 되실거에요.

mybatis $ 취약점

감사합니다.

kts327님의 프로필 이미지
kts327

작성한 질문수

질문하기