可能重複:
Prevent Direct Access To File Called By ajax Function阻斷非AJAX請求到PHP
我創建依靠AJAX調用到PHP頁面的站點。有沒有辦法阻止訪問原始數據? (即通過他們自己的帖子請求訪問php文件)。
我猜想最好的方法來做到這一點(如果可能的話)將阻止PHP發送數據到任何不是來自AJAX的東西(因爲它必須來自同一個域)。有什麼建議麼?
可能重複:
Prevent Direct Access To File Called By ajax Function阻斷非AJAX請求到PHP
我創建依靠AJAX調用到PHP頁面的站點。有沒有辦法阻止訪問原始數據? (即通過他們自己的帖子請求訪問php文件)。
我猜想最好的方法來做到這一點(如果可能的話)將阻止PHP發送數據到任何不是來自AJAX的東西(因爲它必須來自同一個域)。有什麼建議麼?
當請求沒有適當的GET或POST變量時,您可能不會返回任何內容。
這樣說,誠實地說,沒有任何事情需要擔心,因爲任何實際瀏覽你發送ajax請求的頁面的人都可能試圖做一些惡意的事情,並且他們接收通過ajax發送的內容不會獲得任何東西。沒有普通用戶每天訪問量來源...
我並不擔心隨便/普通用戶。這些數據具有內在價值,所以我試圖傳播它,而不是免費贈送它。 – Exupery
Ajax庫在他們的請求中添加X-Requested-With: XmlHttpRequest
頭,所以你可以測試它的存在:
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XmlHttpRequest')) {
// not an ajax request
}
但是一惡意用戶也可以輕鬆地發送該頭文件,因此不要使用它來保護敏感數據。
由於@Evan鏈接在他的評論中,您可以通過在$_SERVER
中查找HTTP_X_REQUESTED_WITH
來檢測XmlHttpRequest請求。但是這個值來自客戶端發送的頭文件。與用戶的任何信息一樣,這可能是欺騙性的。
確實沒有辦法以實用的方式阻止非XmlHttpRequest。如果阻止API非常重要,那麼可以在向主頁面發出請求時向JavaScript發出唯一密鑰(並將其存儲在會話中)。它在XmlHttpRequest中傳遞,當該頁面看到它並驗證它時,它將提供訪問權限。但即使這個獨特的鑰匙可以從頁面上刮掉。
我曾經想過類似的東西,但正如你指出的那樣,這不會增加很多安全性。我所尋找的可能是不可能的。 – Exupery
http://davidwalsh.name/detect-ajax –
請注意,此方法不是100%保存。像HTTP_X_REQUESTED_WITH這樣的HTTP頭可以很容易地被欺騙。另外,這個問題之前被問到:http://stackoverflow.com/questions/1756591/php-prevent-direct-access-to-file-called-by-ajax-function – Luwe
@Luwe:這個問題有什麼共同點有這個嗎? –