CI 묻고 답하기

제목 CI에서 클래스/함수 주소를 직접 입력했을 때 막는 방법
글쓴이 호동 작성시각 2015/06/29 07:46:14
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 18701   RSS

코드이그나이터는 맨 위에 define('BASEPATH') or exist('오류 메시지');
하면서 주소에 http://127.0.0.1/application/controller/main/ 이런식으로 직접 입력하면 오류를 뜨게 하는데요
uri routing 을 이용해서 아래와 같이 설정하면
$route['default_controller'] = 'main';
$route[':any'] = "main/index/$1";
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
http://127.0.0.1/함수명
이렇게만 입력해도 Main 클래스의 함수를 불러옵니다.
하지만 http://127.0.0.1/main/write/ 이런식으로 직접 입력하면 그 함수만 불러와져 그 페이지만 보이게됩니다.
누가 일부러 그 함수만 불러서 그 페이지만 보이개 해서 에러페이지를 보이게 할 수 있습니다.
클래스의 construct 에서 1번째 주소를
if($this->uri->segment(1) == 'main') {
    echo show_404('page', false);

}
이렇게 해서 오류 페이지를 띄워줘버리면 막히긴 막히는데
이렇게하면 ajax 로 불러올때도 오류페이지를 보여줘버립니다.
사람이 직접 그 주소를 입력했을 때만 막을 방법은 없을까요? 'ㅁ'.
 

 다음글 초보적인 질문인데요. 엑티브레코드를 사용하지않고 (4)
 이전글 코딩방법의 대중적인 방법 문의 드립니다. (3)

댓글

변종원(웅파) / 2015/06/29 10:20:45 / 추천 0
사람이 입력했을때와 ajax호출일 때를 어떻게 구분하실건가요?
사람도 ajax 입력인 것처럼 처리할 수 있습니다.

보안때문이라면 매뉴얼(http://cikorea.net/user_guide_2.1.0/general/controllers.html)에서 private함수 부분 참고하시고
csrf(http://codeigniter-kr.org/user_guide_2.1.0/libraries/security.html)를 적용하시는 것이 좋습니다. 
한대승(불의회상) / 2015/06/29 10:42:40 / 추천 0
http://127.0.0.1/main/write/ 를 입력해서 에러 메시지가 보인다면 write가 잘못 설계 된겁니다.
데이터 입력없이 write폼을 직접 호출 했을때에 대한 대비가 안되어 있는거죠.

사용자는 개발자가 예상하지 못한 여러가지 방법으로 사용을 시도 합니다.

폼벨리데이션 라이브러리를 사용하여 대비 하세요.
http://cikorea.net/user_guide_2.1.0/libraries/form_validation.html
호동 / 2015/06/29 14:41:07 / 추천 0
답변 감사합니다 두분다 도움이 많이 되었습니다.