SYS_REFCURSOR out parameter 사용

김르르
2 min readApr 13, 2021

--

  • 커서의 제어권을 외부로 전달할 때 사용
  • java 에서는 ResultSet으로 전달받는다

사용법)

bind 변수 등록(SYS_REFCURSOR는 오라클에만 존재하는 커서)

  • java.sql.Types.REF_CURSOR로 받을 수 없다 (error)
  • Oracle에서 배포하는 jar파일(ojdbc8.jar)안에 oracle.jdbc.driver.OracleTypes 클래스를 사용하여 bind변수를 처리한다

cstmt.registerOutParameter(인덱스, OracleTypes.CURSOR );

  • 프로시저 실행

cstmt.execute();

  • out parameter에 할당된 값 받기

ResultSet rs = cstmt.getObject(인덱스);

var a refcursor

exec test( :a )

Create or replace procedure test( a out sys_refcursor )

SQLInjection

  • 쿼리문을 외부에서 입력하는 것
  • 개발자가 작성한 쿼리문을 예측한 후, 정보탈취용 쿼리문을 외부에서 입력하여 정보를 빼내가는 해킹 기법(OWASP에서 정리한 보안사고 중 1위)

로그인 수행 쿼리문

: 입력받은 아이디와 비밀번호로 조회된 레코드가 존재하면 로그인 성공, 로그인 실패

String sql = “select id from 테이블명 where id=“+id ”and pass =“ + pass +” ”;

입력값으로 쿼리문이 생성

String sql = “select id from 테이블명 where id= ‘ hong ’ and pass = ‘ 2134 ”;

아이디에 ‘ or 1 = 1- -를 입력하고 비밀번호를 마음대로 넣으면

String sql= “select id from 테이블명 where id = ‘ ‘ or 1 =1 — -and pass = ‘2134’ ”;

아이디부분에 쿼리문이 삽입되어 항상 참인 결과가 나와 로그인이 된다

--

--

김르르
김르르

Written by 김르르

0 Followers

르르입니다

No responses yet