我想知道是否有任何方式可以通過URL限制對我的控制器功能的訪問。但我想通過我的網站鏈接給他們打電話。例如,如果我有我的網站的鏈接指向一個控制器功能:Codeigniter - 通過URL調用限制對控制器功能的直接訪問
<a href='test/function'>Call me</a>
但我不希望被稱爲控制器功能,當我把上面的網址在瀏覽器地址欄中。有人能幫忙嗎?
我想知道是否有任何方式可以通過URL限制對我的控制器功能的訪問。但我想通過我的網站鏈接給他們打電話。例如,如果我有我的網站的鏈接指向一個控制器功能:Codeigniter - 通過URL調用限制對控制器功能的直接訪問
<a href='test/function'>Call me</a>
但我不希望被稱爲控制器功能,當我把上面的網址在瀏覽器地址欄中。有人能幫忙嗎?
當您在評論所說的那樣,如果你想通過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請求時才允許訪問。
這是不可能的。 Apache和CodeIgniter允許通過手動輸入的瀏覽器URL或訪問超鏈接訪問PHP腳本。這兩種情況都以完全相同的方式連接到您的Web應用程序,但他們只是以不同的方式到達。
您可以只允許訪問您的CodeIgniter腳本(即防止公共用戶訪問控制)通過使用:
if (! defined('BASEPATH')) exit('No direct script access allowed');
馬庫斯指出,你可以使用類似:
if (!$_SERVER['HTTP_REFERER']) $this->redirect('/home');
但它往往非常不一致。
@sanks'$ _SERVER ['HTTP_REFERER']'是你所需要的。 – Broncha
簡單而有效 –
這確實有幫助。我還添加了這個作爲一個額外的檢查
$allowed_host = gethostname();
$host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
if(substr($host, 0 - strlen($allowed_host)) != $allowed_host)
$this->redirect('/home');`
解決方法:把這個代碼在每一個控制器方法
if (defined('BASEPATH') && !$this->input->is_ajax_request())
exit('No direct script access allowed');
不錯,但用戶仍然可以改變ajax請求,並且如果該函數在全局工作,可以做一團糟。例如一個全局函數來更新,它將接收表格名稱和其他參數,這些參數可以通過谷歌開發人員工具輕鬆更改。我有遠嗎? –
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將你會把這裏面絕對有效..
''''標籤正在做你想要限制的東西 – cyberhicham
我沒有給你。當我點擊「給我打電話」鏈接時,我想要調用該功能。但是當我在地址欄中粘貼url「mysite/test/function」時,我不希望調用該函數。 – Sanks
目的是什麼?你是通過AJAX加載一些內容嗎?然後我會推薦使用類似可以附加到數據屬性的鍵。 – Marcus