2013-01-19 56 views
2

我想知道是否有任何方式可以通過URL限制對我的控制器功能的訪問。但我想通過我的網站鏈接給他們打電話。例如,如果我有我的網站的鏈接指向一個控制器功能:Codeigniter - 通過URL調用限制對控制器功能的直接訪問

<a href='test/function'>Call me</a> 

但我不希望被稱爲控制器功能,當我把上面的網址在瀏覽器地址欄中。有人能幫忙嗎?

+0

我沒有給你。當我點擊「給我打電話」鏈接時,我想要調用該功能。但是當我在地址欄中粘貼url「mysite/test/function」時,我不希望調用該函數。 – Sanks

+1

目的是什麼?你是通過AJAX加載一些內容嗎?然後我會推薦使用類似可以附加到數據屬性的鍵。 – Marcus

回答

0

當您在評論所說的那樣,如果你想通過AJAX加載鏈接:

您的標記:

<a href="test/function" data-key="abc"> 

你的jQuery:

$('a').on('click',function(){ 
    var data = $(this).data('key'); 
    $('#result').load($(this).attr("href") + '?key=' + data); 
}); 

然後在你笨控制器,你檢查你的密鑰是否存在並匹配(「abc」),否則你返回一個403或者類似的東西。

此外,您當然也可以檢查$_SERVER['HTTP_REFERER']以查看用戶來自哪裏(但這很容易被欺騙),並且只有在您從自己的站點發出GET請求時才允許訪問。

3

這是不可能的。 Apache和CodeIgniter允許通過手動輸入的瀏覽器URL或訪問超鏈接訪問PHP腳本。這兩種情況都以完全相同的方式連接到您的Web應用程序,但他們只是以不同的方式到達

您可以只允許訪問您的CodeIgniter腳本(即防止公共用戶訪問控制)通過使用:

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

馬庫斯指出,你可以使用類似:

if (!$_SERVER['HTTP_REFERER']) $this->redirect('/home'); 

但它往往非常不一致。

+0

@sanks'$ _SERVER ['HTTP_REFERER']'是你所需要的。 – Broncha

+0

簡單而有效 –

0

這確實有幫助。我還添加了這個作爲一個額外的檢查

$allowed_host = gethostname(); 
$host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); 
if(substr($host, 0 - strlen($allowed_host)) != $allowed_host) 
    $this->redirect('/home');` 
2

解決方法:把這個代碼在每一個控制器方法

if (defined('BASEPATH') && !$this->input->is_ajax_request()) 
    exit('No direct script access allowed'); 
+0

不錯,但用戶仍然可以改變ajax請求,並且如果該函數在全局工作,可以做一團糟。例如一個全局函數來更新,它將接收表格名稱和其他參數,這些參數可以通過谷歌開發人員工具輕鬆更改。我有遠嗎? –

0
In view: `<input type="hidden" value="1" name="back">` 

put inside your function in Controller: 


if(($this->input->post('back'))==1) 
       { 
       echo " what you want do here"; 
       } 
       else 
       { 
       $this->load->view('template',array('welcome_page')) ; 
       } 

表單驗證的開始。如果condition..This將你會把這裏面絕對有效..

相關問題