2012-12-21 3 views
-1

현재 사용자가 수동으로 URL을 입력 할 수 있다는 점을 제외하고는 모든 것이 황금으로 작동합니다. 이는 내 사이트에 대해 CI를 설정하는 방법을 엉망으로 만듭니다. 예를 들어 :CodeIgniter를 사용하여 특정 URL을 차단하는 방법은 무엇입니까?

www.somesite.com/folder/

컨트롤러에서이 폴더는 ... 액세스 할 수 그들에게 404 오류를 줄 것이다 폴더 인덱스 페이지로 리디렉션 할 필요가 안된다. 나는 htaccess 파일에서 모든 것을 거부하려고 시도했지만 아무 것도하지 않는 것 같습니다. 기능이 좋아에

www.somesite.com/folder/index.html

는 사실은 모든 폴더를합니다. 폴더에 index.html 파일이 있지만 읽을 수 없습니다. CI에서이 문제를 해결할 수있는 방법이 있습니까? 또한 사용자가 컨트롤러 기능에 수동으로 액세스 할 수있는 문제가 있습니다. 사람들이 제안한대로 비공개로 변경하려고했지만 스크립트에서 액세스 할 수 없습니다. 예를 들어 :

www.somesite.com/controller_file/some_function

어떻게이 기능에 액세스를 차단합니까?

답변

1

당신은 화이트리스트 sollution을 만들 수 있습니다

  1. 열고 응용 프로그램/설정/routes.php
  2. 가 허용 할 경로를 추가합니다.
  3. 포괄 경로 .*을 추가하고 errot 처리기로 리디렉션

Codeigniters는에 사용자가 경로를 입력 할 때마다 너무 명시 적으로 허용하지 않았다 그들이 배열에 나열된 순서대로 경로 패턴과 일치하는 할려고 당신은 단지 특정 패턴과 일치하는 요청 리디렉션하여 블랙리스트의 논리를 만들 수 있습니다 하고가 기본으로 유지 : 그것은 allqays 캐치 올 경로에

user-guide on routing

EDIT 그를 리디렉션합니다 다른 모든 사람들을위한 행동.

+0

자, 그럼 www.somesite.com/folder/에 대한 경로를 어떻게 설정합니까? 나는 $ route [ 'folder /'] = 'error_mess'를 시도했다; – KraigBalla

+0

나는 그것을 얻었다 !!! 따라서 사용자가 컨트롤러 기능에 액세스하지 못하게하려는 경우 다음과 같이 할 수 있습니다. $ route [ 'account/account/(: any)'] = 'error_mess'; – KraigBalla

+0

이 기능을 모든 컨트롤러에 사용하는 것이 좋지 않을까요? – KraigBalla

1

파일 시스템에 대한 액세스를 거부하는 경우 가장 좋은 방법은 ApplicationSystem 폴더를 웹 루트 외부에 배치하는 것입니다. 그런 다음 index.php를 편집하여 각 폴더의 새 경로를 설정하십시오. 내 일반은 다음과 같습니다 설정 :

두 번째 질문에 대해서는
+ Root 
| - Application 
| - System 
| + Webroot 
| | - js 
| | - css 
| | - index.php 
| | - ... 
+ - ... 


, 당신은 언더로를 씁니다 URL에서 직접 액세스되는 특정 기능을 방지 할 수 있습니다.

그래서 그 대신

public function some_function() {...}

의 사용 public function _some_function() {...}

그런 다음 당신이 어떤 AJAX 기능이있는 경우, 드롭해야합니다 $this->_some_function();

와 컨트롤러 호출 할 수 있습니다

그 (것)들에게 접근 가능하게하기 위하여 그들의 이름에서 underbar. 다음 조건을 사용하여 함수를 래핑하여 사용자가 URL에서 직접 액세스하는 것을 중지 할 수 있습니다.

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {} 

위 요청은 AJAX를 통한 것인지 확인합니다.

+0

나는 그것이 효과가 있다고 생각했지만 ... 나는 특정 기능을 호출하는 아약스 전화를 가지고 있는데, 내가 밑줄을 추가 할 때, 네가 그것을 직접적으로 액세스하지 못하게하지만, 또한 아약스 요청이나 그 문제에 대한 어떤 형태의 행동. – KraigBalla

+0

왜 내 대답을 받아 들일 수 없습니까? 어쨌든 AJAX 요청의 경우에는 펑크 션에서 언더 바를 삭제해야하지만 아약스가 데이터를 게시했는지 확인하여 사용자가 URL에서 직접 액세스하지 못하도록하는 조건을 추가해야합니다. 내 업데이트 답변을 참조하십시오. – Jeemusu

+0

나는 그것이 효과가 있다고 생각했기 때문에 밑줄을 사용할 때 양식 제출 또는 아약스 요청에서 함수에 액세스 할 수 없습니다. 나는 AJAX에 대한 편집을 보았고 그것이 작동 할 것이다. 그러나 그것이 폼 제출 일 경우는 어떨까? – KraigBalla

관련 문제