2009-02-13 63 views
1

我使用jQuery調用通過$不用彷徨方法Ajax和文件名 - 最佳實踐

function fetchDepartment(company_id) 
{ 
    $.get("ajax/fetchDepartment.php?sec=departments&company_id="+company_id, function(data){ 
     $("#department_id").html(data); 
    }); 
} 

PHP文件,我在想什麼是我能更進一步保證文件名?

目前我有PHP文件中的全局訪問檢查檢查,如果用戶登錄,如果他可以訪問此數據等

但是,如果有進一步的措施,我可以採取所以我想知道用戶看不到該文件名,或者您推薦採取的其他步驟。

回答

2

編碼的請求
您可以使請求的詳細信息有效無形的休閒惡棍通過編碼幾乎所有的URL,然後請求細節服務器端進行解碼。

請求詳細信息將包括您希望執行的操作以及與該操作相關的參數。

所有的請求都會被髮送到一個URL,服務器端進程會根據需要對請求細節進行解碼並執行相關操作。


原始地址:
/ajax/delete.php?parameter1=foo &參數2 =棒

請求詳細信息:
行動=刪除&參數1 = FOO &參數2 = BAR

編碼請求詳情(使用base64編碼):
YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

編碼的URL:
/AJAX /請求= YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

我不相信這是本機功能編碼在JavaScript中的base64,但它遠遠不可能找到一個合適的方法?或者寫你自己的。

對於混淆/縮小的客戶端JavaScript來說,確定如何「手動」請求是非常棘手的。

隱藏實現細節
有很多,你可以遵循,使您的應用程序通過URL濫用攻擊不易做法。

讓我們從一個URL開始:ajax/fetchDepartment.php?秒=部門& COMPANY_ID = 99

有沒有需要什麼樣的服務器端技術,您正在使用(PHP)也通過查詢字符串(秒,COMPANY_ID),什麼查詢字符串值實際上意味着透露。

掩蔽服務器端技術
假設你已定義爲默認index.php,以下網址是等同的:

  • ajax/fetchDepartment.php?sec=departments&company_id=99
  • ajax/fetchDepartment/index.php?sec=departments&company_id=99
  • ajax/fetchDepartment/?sec=departments&company_id=99

第三個URL不會顯示您正在使用的服務器端技術。這限制了可能的攻擊範圍。它還使您可以更輕鬆地切換到不同的服務器端技術,而無需更改網址。

隱藏的請求參數含義

  • ajax/fetchDepartment/?sec=departments&company_id=99
  • ajax/99/departments/

後者URL仍然傳達足夠的信息,沒有透露什麼信息是指執行請求。

雖然有人仍然可以改變這些值,但他們不知道他們在改變什麼。這將使攻擊者更難評估和理解他們所做的任何URL更改的結果。

+0

非常好的答案,謝謝。 – 2009-02-13 21:55:27

0

很多情況下,您可以通過http不加載它來加載用戶的特定信息的URL的唯一方式。也許你可以在調用頁面上加載一組數據,或者使用更通用的url加載另一個頁面。