2012-12-21 92 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. 打開你的application/config/routes.php文件
  2. 添加要允許的路由。
  3. 添加一個包羅萬象的路線.*,重定向到一個errot處理

Codeigniters改掉他們在陣列中列出的順序路由模式匹配,從而 只要用戶輸入的路線,你沒有明確允許它會allqays他重定向到包羅萬象的路線

user-guide on routing

編輯: 您可以通過重定向請求只有符合特定模式的創建黑名單邏輯,並保持defaul對所有其他人的行爲。

+0

好的,那麼我將如何爲www.somesite.com/folder/設置路線?我試過$ route ['folder /'] ='error_mess'; – KraigBalla

+0

我懂了!因此,如果我想嘗試阻止用戶訪問控制器功能,我可以簡單地執行此操作:$ route ['account/account /(:any)'] ='error_mess'; – KraigBalla

+0

這樣做到每個控制器比它有一個功能是一件壞事? – KraigBalla

1

只要拒絕訪問文件系統,最好的辦法就是將您的ApplicationSystem文件夾放在webroot之外。然後編輯你的index.php來設置每個文件夾的新路徑。我一般設置如下所示:

+ Root 
| - Application 
| - System 
| + Webroot 
| | - js 
| | - css 
| | - index.php 
| | - ... 
+ - ... 


關於你的第二個問題,以防止某些職能從直接從你需要以下劃線預先考慮他們的URL訪問。

所以不是

public function some_function() {...}

使用 public function _some_function() {...}

然後它可以在你的控制器$this->_some_function();

如果您有任何AJAX功能,你需要刪除名爲從他們的名字的底條,使他們訪問。您可以通過使用以下條件包裝您的函數來阻止用戶直接從URL訪問它們。

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

以上檢查請求是否通過AJAX。

+0

我認爲它的工作,但它不......我有一個ajax調用,調用某個函數,當我添加底條,是的,它確實阻止我直接訪問它,但它也阻止了該Ajax請求或對此事採取任何形式的行動。 – KraigBalla

+0

你爲什麼不接受我的回答?無論如何,對於AJAX請求,您需要從您的functons中刪除underbar,但添加一個條件來檢查數據是否已由ajax發佈,從而阻止用戶直接從URL訪問它。看到我更新的答案。 – Jeemusu

+0

因爲我認爲它有效,但是當我使用下劃線時,無法訪問表單提交或ajax請求上的功能。我看到了你對AJAX的編輯,這會起作用......但是如果它是表單提交呢? – KraigBalla