CI 묻고 답하기

제목 비정상적인 접근을 막기위한 방법.
글쓴이 리퍼스 작성시각 2015/12/24 13:25:28
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 19952   RSS

안녕하세요

회원 삭제 controller에 직접 주소창에 직접 입력했다가 DB 데이터를 홀랑 날려먹었습니다. 코드이그나이터에서 제공하는 코드 페이지 맨 상단에

if (!defined('BASEPATH'))    exit('No direct script access allowed');

요걸 넣으면 직접 주소를 입력한경우 No direct script access allowed 메시지를 뿌려준다길래 시험삼아 해봤다가 날려먹었는데요... 제가 그 기능에대해 먼가 크게 착각하고 있는것 같습니다.

 

if (!defined('BASEPATH'))    exit('No direct script access allowed');

 

class Home extends CI_Controller {

...

function delete() {

 $bidx = $this->input->post('bidx');

 $this->member_m->delete($bidx);

}

...

 

코드는 대충 위와 같습니다.

웹브라우저 검색창에서  localhost/home/delete  이렇게 직접 입력을하면

No direct script access allowed

이 메시지가 출력되야 하는것 아닌가요?

 

직접 입력을해서 실행을하니 post는 없으니 $bidx에는 공백이 입력되고 공백된 값으로 DB에 전달되어 삭제처리를 진행해 버리더군요.

 

만약, 제가 잘못 알고 있는거라면 이렇게 비정상적인 방법으로 접근시 차단하는 방법들이 어떤것이 있을까요?

 

혹, 코드이그나이터에서 config.php등의 설정을 해줘야 if (!defined('BASEPATH'))    exit('No direct script access allowed'); 가 작동을한다면 어떤부분을 수정해줘야 하나요?

 

 다음글 한빛미디어 codeigniter 프레임워크 책 예제 ... (3)
 이전글 비밀번호 일치하는지 체크하는 코드입니다 도와주세요 ㅠ (12)

댓글

한대승(불의회상) / 2015/12/24 13:49:06 / 추천 0

"주소를 직접 입력한다."의 정확한 의미는 웹브라우져의 주소창에

localhost/application/controllers/Home.php

라고 입력하는 경우 입니다.

변종원(웅파) / 2015/12/24 14:06:06 / 추천 0

localhost/home/delete 이 정상적인 작동 주소입니다. 위 구문대로라면 그냥 삭제합니다.

$bidx가 있을때 작동하도록 조건문 처리하시면 됩니다.

그리고 보통 글 삭제는 글 소유주 여부를 검사하고 삭제합니다.

 

보안강화측면에서 매뉴얼에서 보안부분 csrf 적용하세요.

 

리퍼스 / 2015/12/24 14:21:36 / 추천 0

그럼 제가 크게 착각하고 있었던것이 맞군요. 불의회상님의 언급하신 프레임워크를 통한 이동 경로가 아닌 직접 프레임워크 내부에 대한 접근을 막아준다는거군요. 잘알겠습니다.

웅파님 post로 전달된 값이 공백일때도 특정처리를하는부분이 있어 순서대로 타고 왔는지 아니면 웹브라우저에 입력을해서 왔는지를 구분하기 위한 거였는데, 코드이그나이터에서 이런부분에대해 체크할수 있는 구문이 있을까해서 문의 드렸습니다.

 

감사합니다.

변종원(웅파) / 2015/12/24 14:33:47 / 추천 0

그 부분은

if($_POST)

{

    //삭제 액션

}

으로 처리하시면 됩니다.