ibatis slq map 동적 sql 질문 5

by PIANO [DB 기타] [2017.08.30 14:54:58]


안녕하세요 전자정부fw에 ibatis dynamic sql 을 사용중인 프로젝트 입니다.

selct s.*

from (

<include refie ="selectEventboard"/>

where userid = #userid#

<dynamic>

<isNotEqual> property ="field" compareValue ="all">

       $field$ like '%' #keword# || '%'

</inNotEqual>

</dynamic>

 

 

 

//소스일부분인입니다.

질문은 $field$ 이부분에서 정적SW진단도구를 수행하니 SQL INJECTION이라고 잡혔습니다.

수정을 하라고 지적을 하였으나 IBATIS 문장에서 $를 사용이 Dynamic Sql 사용을 위하여 수정이 불가능하다라고 개발자한테 답변을 받았습니다.

제가 DB쪽 문법을 몰라 이렇게 질문을 하게 되었습니다.

$field$ -> #field#로 수정을 하면 안되는건가요?(preparedStatement 하게 )

 

by 마농 [2017.08.30 15:03:46]

값은 #으로 하여 바인드 변수 처리 하는게 맞습니다만...
값이 아닌 테이블명, 컬럼명, 명령어 등은 # 처리가 불가합니다.
# 으로 처리하면 컬럼명으로 인식하지 못하고 그냥 문자열로만 인식하게 됩니다.
예를 들어 field = 'ename' 이고 keyword = 'SCOTT' 로 입력되었을 때
$ 를 사용한 조건은 WHERE ename = 'SCOTT' 로 처리되는데
# 를 사용한 조건은 WHERE 'ename' = 'SCOTT' 로 처리됩니다.
field 항목의 종류는 몇가지로 제한되어 있을 것입니다.
field + keyword 조합으로 처리하기 보다는
field 항목별 각각의 변수를 사용하는 방식으로 변경하면 될 것 같네요.


by PIANO [2017.08.30 15:07:43]

감사합니다.


by 우리집아찌 [2017.08.30 15:05:08]

전체 쿼리로 올려주세요.

DYNAMIC SQL 안쓰고 해결할수있을지는 봐야 알것같습니다.


by PIANO [2017.08.30 15:10:41]

감사합니다.

각각의 컬럼변수를 사용하는 방식으로 적용되어 있고 <isNotEqual property = 'field

 compareValue = 'a''> 경우에만 $field$ like '%' #keword# || '%' 되어 있습니다.


by 우리집아찌 [2017.08.30 15:22:07]

DECODE(#field#,'field1', field1,'field2',field2,'field3','field3'  .... ) like '%' #keword# || '%'

이렇게 처리할수도 있을것같은데 성능을 기대하긴 좀 힘들것 같습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입