2011-12-07 111 views
1

在我的CMS中,我有一個使用AJAX將大量迷你接口加載到面板的頁面。這些接口來自/ajax目錄中的各種PHP文件。PHP - 只允許通過AJAX訪問

是否有可能以某種方式允許使用ajax訪問這些文件,而不僅僅是瀏覽它們?

當然,我擔心有人會發現/ajax目錄,並且無需登錄即可訪問CMS的核心功能。當然,我可以導入我的用戶類並單獨驗證每個AJAX文件,但是隻能通過AJAX訪問嗎?

+3

不,您**必須**將您的驗證碼放入處理服務器端代碼的每個請求中。 – Flukey

+2

這是一個糟糕的安全模型。 – NullUserException

+0

@NullUserException我沒有說這是我的任何生產代碼中的安全模型 - 我只是好奇... –

回答

6

是否有可能以某種方式允許使用ajax訪問這些文件,而不僅僅是瀏覽它們?

你可以添加額外的HTTP標頭,或者修改現有的(如Accept)當你從JavaScript的請求......但既然你想出於安全原因,做到這一點,那將不足。

當然,我可以導入我的用戶類,並驗證每一個AJAX的單獨文件

做到這一點。 Ajax請求並不特殊。它們只是HTTP請求。針對Ajax創建的終點應像其他任何HTTP請求終點一樣,通過身份驗證/授權進行保護。

+0

謝謝 - 當通過AJAX訪問時,PHP的$ _SESSION變量是否會完全相同? –

+0

當然可以。 – Quentin

+0

'WebSockets'怎麼樣? – candlejack

4

不,不管怎樣,黑客都可以僞造Ajax請求。你需要在任何地方進行身份驗證,否則你會被搞砸。

2

從瀏覽器外部,任何人都可以向您網站上的任何公開網址發起HTTP請求。除了標題之外,沒有什麼特別的AJAX請求,而且這些請求很容易被欺騙。

現在什麼不能很容易被欺騙是一個安全的會話機制。如果您要求人們登錄,那麼無論如何您都應該這樣做。

1

簡單的答案,「不」。

您的ajax文件還應該驗證用戶是否以系統前端相同的方式登錄。

1

AJAX與Standart請求幾乎相同,您可以檢查標題,但這不是安全的方式。如此之短,你不能這樣做。在服務器端對你提出的建議進行認證。

0

驗證您的AJAX文件。如果它們有很多,請創建一個類並將其擴展到每個單獨的AJAX文件中。

/ajax/abstract.php

<?php 
abstract class AjaxHandler { 

    public function __construct() { 
     // import authentication handler 
     if ($authenticated) { 
      $this->display(); 
     } 
     else { 
      header('HTTP/1.1 401 Unauthorized'); 
      exit; 
     } 
    } 
} 

然後在每個文件中,即/ajax/get_user_profile.php

<?php 
class GetUserProfile extends AjaxHandler { 

    public function display() { 
     // do your routine 
    } 
} 
-1

好了,你可以有另一種選擇是使用post方法來獲得從PHP的內容,並在你的PHP你應該設置爲post方法的關鍵。然後系統刪除跨源訪問。 :)

相關問題