2011-11-14 44 views
4

我創建使用CodeIgniter的web應用程序。有幾個地方我在應用程序中使用ajax。Ajax請求不向所有人開放

我想知道是否有一種方法,我可以停下來Ajax控制器直接訪問和查詢,只允許從頁面發起合法的Ajax請求進行處理。

謝謝。

+0

AJAX請求只是一個簡單的HTTP請求。爲什麼你想停止直接訪問? – kapa

+0

我知道這可能很難停止決心的人,但是,我想知道是否有辦法阻止人們直接訪問AJAX結果頁面。它顯示來自數據庫的結果(沒有什麼需要保護),但我只想要它的目的用途,而不是有人來從我們的數據庫中刪除。 – DMin

+0

但是你反正在頁面上顯示數據庫結果,對不對? – kapa

回答

5

是的,你可以做到這一點沒有問題。 CodeIgniter輸入類有一個名爲is_ajax_request()的方法。只需在控制器操作開始時檢查這一點。例如:

function ajax_save() { 
    if ($this->input->is_ajax_request()) { 
     //continue on as per usual 
    } else { 
     show_error("No direct access allowed"); 
     //or redirect to wherever you would like 
    } 
} 

如果您有針對Ajax調用完全指定控制器,你可以把if語句到構造function __construct()的控制器。記得先調用parent :: __ constructor()!

編輯:至於「從頁面發起」,你應該做認證+安全檢查(通過會議可能讓你不打數據庫)上的Ajax請求。因此,一個與您的webapp無關的流氓用戶不應該能夠手動發送ajax請求。希望這回答你的問題。

+0

感謝這:)工作很好。 – fl3x7

+2

這只是檢查是否在HTTP標頭中設置了「是ajax」標誌。任何人都可以爲任何請求設置該標誌。僅在決定返回的最佳數據格式是什麼時纔有用。它不會提供任何安全性。 – Quentin

+0

同意。不是黑客的證據,但會阻止應用程序中的隨機請求(即來自hrefs)無意中訪問AJAX控制器操作。 – MikeMurko