我最近開始在PHP中大量使用AJAX支持的腳本,事實上,被AJAX調用訪問的文件也可以直接使用,如何禁用?AJAX只能訪問
AJAX只能訪問
回答
你不能可靠地防止這種情況發生。關鍵並不是認爲有人直接將此文件作爲安全問題進行訪問 - 爲此做好準備,您將處於更安全的地方。
有些人可能會建議的代碼看起來像這樣(或類似):
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// more code here
}
然而,事情的事實是,HTTP頭可以很容易地欺騙,並且不保證代碼的一種手段。在我在一個繁忙的網站上測試後,我發現這些頭文件實際上並不那麼可靠。
沒有辦法直接禁止訪問。由於查詢總是可以根據您提出的任何標準進行匹配。
如果正在使用XMLHttpRequest來查詢它增加了可以使用的東西等檢測頭的服務器:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
正如其他人在他們的回覆中所建議的,這是不可能的。這是因爲計算機安全的一個主要原則:你永遠不能相信客戶。這就是爲什麼我們驗證來自客戶端的所有輸入等。
而不是試圖阻止其他客戶端訪問您的服務,而是花時間編寫防禦性Web服務。意思是,確保惡意用戶不能通過業務邏輯進行注射或其他攻擊。例如,確保所有電子郵件都是有效的,人們不會購買負面美元等物品等。
哦,而且網絡服務是開放的事實是一件好事!您爲用戶提供了一個開放的API,非常整潔!也許不是試圖鎖定你的社區,而是讓你接受它 - 給他們一些關於如何與你的服務接口的文檔,他們會創造更多的客戶。與其購買iPhone SDK並花時間學習Objective C,您的一位用戶可能會這樣做。
這是可能的,但不可靠。除此之外,所有有效的點 –
也許你應該使用一些XSS防禦技術,比如傳遞一些安全密鑰以及ajax請求。只給JavaScript的關鍵,使加載頁面的異步查詢。
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
在這種情況下,你會不會擔心路過的人請求直接將文件,只要你保持安全的密鑰,用木樁來調用的行動,做完整性檢查。
- 1. 只能訪問jQuery.ajax而不是$ .ajax
- 2. 只能通過ajax訪問文件
- 3. 訪問AJAX功能
- 4. 只能訪問ExcelShapes
- 5. 只能通過ajax調用才能訪問.cfm模板?
- 6. PHP - 只允許通過AJAX訪問
- 7. (可能)只是AJAX/PHP的問題
- 8. 無法訪問jquery和ajax的功能
- 9. 通過AJAX訪問PHP類功能
- 10. 試圖訪問一個Ajax功能
- 11. 如何訪問網站的CMS只能訪問數據庫
- 12. 訪問前一頁後只能訪問頁面
- 13. 域名只能通過安全訪問
- 14. 使文件只能訪問php
- 15. 只能從一個類訪問
- 16. 能夠訪問Laravel只/路由5.2
- 17. 使方法只能訪問其他類
- 18. WordPress的 - 限制只能訪問插件
- 19. 只能通過密碼訪問頁面
- 20. 只能訪問一個使用QTreeWidget :: itemAt
- 21. 只能訪問位置管理器
- 22. Redis位集只能訪問正值?
- 23. 是< - 只能由編譯器訪問
- 24. DropDownList只能在IE中訪問
- 25. 只能訪問特定文件嗎?
- 26. git倉庫不能訪問只讀
- 27. 只能訪問我的調查結果
- 28. Htaccess只能訪問子域名
- 29. 只能從手機訪問的網址
現貨。或者,您可以傳遞一個參數(例如'?ajax'),但這更容易被欺騙。 –