인프런 커뮤니티 질문&답변
${} 사용시 sql 인젝션 이슈가 있다고 하셨는데요, 궁금한게 있습니다.
작성
·
475
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
${}가 sql인젝션으로 위험한 이유가 입력한 문자 그대로 전달되기 때문으로 이해했는데요
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 인젝션 문구 전체가 문자열로 인식해서 쿼리보안상 문제가 없을 것 같은데 제가 모르는 부분이 있나 여쭤봅니다.





