php SQL 인젝션 관련 질문입니다 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

php SQL 인젝션 관련 질문입니다 정보

php SQL 인젝션 관련 질문입니다

본문

그누보드랑은 직접적인 관련은 없지만 너무 알고 싶어서 질문 합니다.

z.php?m=board&board=banner&s=view&PagePnt=&idx=8&part=

이런식으로 링크가 되 있는데요

board=banner
idx=8

요거 뒤에 특수문자가 들어가면 sql 에러가 나옵니다.

이걸 특수문자가 나오면 sql 쿼리가 실행 안되게 하고 싶은데요

어떻게 할까요?

댓글 전체

각 변수마다 필요한 문자를 제약을 두시면 됩니다.

변수가 적용되기전에 필터링을 하는거죠.

단 끝도 없다는거.. 변수의 사용범위를 단순화 하는게 최고 인거 같아요.

한예료.

### z.php?id=120 ### 글번호 변수 id사용
$sql = " Select * from table_name where wid='$id' ";
###############################
해당 url를 공격하기 위해서 "z.php?id=120' or '
이렇게 구문을 시도한다면 에러나 구문이 원하는되로 실행이 되겠죠.

여기서 table의 사용문자 범위를 보시면 숫자만 사용되죠. 디비에서 auto_increment로 설정이 되었다면요.
$id = preg_replace("/[^0-9]/", "", $id);
를 추가하여 변수의 사용범위를 제약을 걸어 두는거죠.

### z.php?id=120 ### 글번호 변수 id사용
$id = preg_replace("/[^0-9]/", "", $id); // 변수필터링
$sql = " Select * from table_name where wid='$id' ";
###############################

각변수 신규 변수 등등 초기화 및 제약사항등등.. 생각하면할수록 끝없이 패치 해야 할거예요.

기본적으로 이런 내용에 충실한 보드를 사용하시는걸 권장합니다. 정신건강에 해롭거든요. 문제가
필터링을 걸어두고 사용하다가 몇개월 후나 1년후에 해당 제약으로 인한 부분적인 기능에 제약이 발생하거든요. 고려를 잘해서 적용하시면 url injection 시도를 그나마 다수 방지 할수 있습니다.

또 여기 활용팁에 주소길에나 구문에 따라 블럭하는 url 방화벽 팁도 있으니 참조하세요. ^^
숫자,문자,_ 만 필터링 하시면 왼만하면 될겁니다.

그외 프로그램및 필터링에 관해서는 언급하지 않고 단지 저는 방향성과 샘플만 말씀드립니다.
preg_replace("/[^0-9]/", "", $board);
=>숫자 0에서 9까지만 남기고 나머지 지워지는거죠.
참고 : http://www.phpschool.com/search/search_main.php?sch_tot_c=&sch_sort_k=&sch_tot_k=preg_replace

보드는 다른문제입니다. 보드마다 허용되는 문자열이 다르고 쉼표와 큰,작은 따움표만 제거 해줘도 됩니다.
mysql_real_escape_string() 이란 함 수로
모든 입력 값에 대해서 escaping 하세요 -
idx=8  는 intval() 로 정수처리하시는게 좋을것 같고요

정규식으로 만들기보단  PHP 기본 제공으로 쓰는 쪽이 안전할듯요 ㅎㅎ
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT