SQL문에서 union 처리...

SQL문에서 union 처리...

QA

SQL문에서 union 처리...

답변 1

본문

common.lib.php 파일에 sql_query함수를 보면


$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);

위처럼 union의 사용을 허락하지 않습니다.

 

그런데, union 이라는 회사, 혹은 제품명이 들어가는 쿼리를 실행할 경우...문제가 되네요...

 

제품명이 unionpay001 이라고 할 경우도 쿼리가 실행이 되지 않습니다.

 

그렇다면...정규식을 수정해서 select from union까지 체크하는것을 select.*from.*union.*select.* 이런식으로

 

처리하면 union이라는 쿼리를 실행하게 되지만...보안상 헛점이 생길까요...?

 

어차피 union이라는 키워드를 삽입해서 공격할 것이라면 select가 뒤에 반드시 와야 겠죠?

 

그러니깐 union뒤에 select가 없으면 쿼리를 통과시켜도 괜찮을까요?

이 질문에 댓글 쓰기 :

답변 1

저방법도 괜찮겠습니다만 테이블명에 union이 들어가는경우(예: bo_table=union) 서브쿼리가 있는 경우에 다시 문제가 생기겠군요.

union조인을 하려면 어쨌든 union 키워드 앞뒤로 공백이 들어가야 할테니 아래처럼 하는건 어떨까요.

$sql = preg_replace("#^select.*from.*\sunion\s.*#i", "select 1", $sql);

 

저도 보안헛점에 대해서는 자신이 없네요. 아무래도 버그레포팅을 해두시는게 좋을듯 합니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 5
© SIRSOFT
현재 페이지 제일 처음으로