CodeIgniter 한국사용자포럼 BETA
빠르고, 유연한 PHP Framework!

CI 코드


SELECT() 사용 시 문제점      
마냐 2 3,251 0 0 2010-09-16 21:50:05

° 관련링크 : http://codeigniter.com/forums/viewthread/166881
http://bitbucket.org/ellislab/codeigniter/issue/112/database-class-active-record-select-method-2nd-parameter
http://codeigniter.com/forums/viewthread/71886

>> 원인
$this->db->select(“QUERY”, FALSE);
select 쿼리에서 두번째 파라미터로 FALSE를 주는 경우

>> 문제
해당 select 쿼리가 발생한 시점부터 이후 쿼리에 대한 테이블, 필드에 대한 식별자 보호 Protecting identifiers가 적용되지 않습니다.
http://codeigniter-kr.org/user_guide/database/queries.html

- 문제 코드

DB_active_rec.php - 78 line
$this->_protect_identifiers = $escape;

>> 해결
DB_active_rec.php 수정
1) 75 ~ 79 line 삭제 
2) 92 line
$this->ar_select[] = $val;
=>
$this->ar_select[] = $this->_protect_identifiers($val, FALSE, $escape);

3) 208 line
$this->ar_select[] = $sql;
=>
$this->ar_select[] = $this->_protect_identifiers($sql);

4) 1504 ~ 1510 line 삭제

----

$this->output->enable_profiler(true);
위 문제가 동일하게 일어나는지 테스트 부탁드립니다.

  목록  

웅파 2010-09-17 16:57:04
  
false로 주게되면 ci core에서 자동으로 체크해줬던 sql injection 방어가 적용이 안되서
수동으로 쿼리내용에 대한 체크를 해줘야 합니다.
대신 말씀하신 경우처럼 어쩔수 없이 mysql함수를 select에 써야할 경우엔 기술하신대로 false로
사용하시면 됩니다. ^^

select와는 조금 경우가 다르지만 where의 경우에는 조금 더 자유도가 있습니다.

$arr = array('scene_start_time <=' => $this->uri->segment(9), 'time+scene_start_time >=' => $this->uri->segment(11));
$this->db->where('c.clip_no', $this->uri->segment(7));
$this->db->where($arr, '', false);
첫번째줄 배열의 두번째 선언을 보시면 +가 있습니다. 이거 처리하려고
세번째 줄에서 false로 선언. false 선언 안하면 에러 납니다. ^^
마냐 2010-09-17 17:12:47
  

답변 감사합니다.

WHERE() 의 경우 문제가 없지만
SELECT("QUERY", FALSE) 를 실행할 경우

DB_active_rec.php - 78 line
$this->_protect_identifiers = $escape;
$escape 값을 $this에 직접 적용하는데 이후 초기화하는 부분이 없습니다.
그래서 해당 페이지에서 쿼리가 실행되는 동안 $this->_protect_identifiers 값이 FALSE로 고정됩니다.

그래서 http://codeigniter.com/forums/viewthread/166881 처럼
SELECT("QUERY", FALSE) 가 실행되는 시점부터
order_by 및 이후 실행되는 쿼리에 대한 테이블 및 필드에 대한 식별자 보호 함수가 적용되지 않습니다.

1.7.2 버전이며 버그로 판단되기는 한데
검색해봐도 관련글이 거의 없어서 정확한지는 모르겠습니다. -_-a

번호 제   목 글쓴이 날짜 조회 추천수
591 TapBBS 공개합니다~ [7] KangMin 2012-04-19 670 0
586 CI에서 sqlite3 연동하기 [0] 불의회상 2012-04-04 299 0
580 CodeIgniter SimpleXML library [2] 타로 2012-02-05 797 0
577 CI 와 Smarty 템플릿의 결합 [4] 불의회상 2012-01-26 899 0
573 Okada Design Blog 소개 [3] 타로 2012-01-12 884 0
568 woctopus 계정관리도구 [2] milosz 2012-01-09 764 0
566 업로드된 이미지 정사각형으로 썸네일 만드는 함수 [3] 불의회상 2012-01-06 781 0
554 코드 이그나이터를 접하고 처음으로 만들어본 객체 입.. [7] 내일은 2011-11-11 2043 0
528 모델코드 생성기 [25] 불의회상 2011-10-13 1706 1
525 ci memo + tank_auth [2] milosz 2011-10-04 1467 0
512 포럼소스를 2.0.1 버전에 맞게 수정하였습니다. [2] 탱크 2011-04-02 4093 2
509 CI 메뉴얼 CHM 버전(영문 2.0) [1] 브라이언 2011-03-30 1523 0
508 CI 메뉴얼 CHM 버전 [0] 브라이언 2011-03-30 1737 0
494 ci memo [8] pam 2011-02-20 2286 1
489 CI 압축 프로그램 [2] 준이 2010-12-27 2022 0
482 듬직이님의 헬퍼 ip 부분 추가. [0] 나이유미 2010-11-22 2419 0
475 SELECT() 사용 시 문제점 [2] 마냐 2010-09-16 3251 0
473 CI의 사용자 인증 소스파일 [2] corean 2010-09-12 3850 0
471 CI 1.7.2 한글 언어팩 1.1 [1] cleansugar 2010-08-26 2489 0
470 Upload 라이브러리 수정본 [0] sisco 2010-07-28 2707 0