我需要一種方法來阻止所有訪問的PHP文件,但允許一個JavaScript文件發送xmlhttp請求到它。該js文件託管在我的服務器上,而且必須留在我的服務器上爲它工作塊直接訪問PHP文件,只允許本地JavaScript訪問它
我有以下
header('Access-Control-Allow-Origin: *');
但允許任何人訪問它。
我需要一種方法來阻止所有訪問的PHP文件,但允許一個JavaScript文件發送xmlhttp請求到它。該js文件託管在我的服務器上,而且必須留在我的服務器上爲它工作塊直接訪問PHP文件,只允許本地JavaScript訪問它
我有以下
header('Access-Control-Allow-Origin: *');
但允許任何人訪問它。
嗯,我不認爲這是可能的。任何人都可以向服務器發出請求,但服務器會選擇迴應誰以及如何回覆請求。現在,如果你只想讓你的JS得到你的服務器的響應,那麼在你從JS發出一個HTTP請求的時候,你將不得不通知服務器。如果沒有公開你的Javscript文件的身份,那麼服務器就不能識別你的JS。但任何人都可以打開你的JS並閱讀它,並弄清楚你如何提出請求並使用相同的東西。
一個可能的解決方案是使用頭('Access-Control-Allow-Origin:*'),以允許每個人向服務器發出請求,但在服務器端,保留允許的域/源的列表您的服務器上的數據庫可能會在您的網站上使用或將要使用您的JS文件。根據您獲得的AJAX請求,您可以從數據庫中檢查是否允許請求的來源並作出相應的響應。現在,如果有人試圖通過除JS之外的任何其他方式請求您的PHP文件,那麼根據數據庫中的數據,您可以拒絕請求或接受請求。如果一個允許的用戶/網站做到這一點,那麼他們將故意搞亂他們自己的數據。
試試這個:
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) <> 'xmlhttprequest')
{
die('direct access is not allowed');
}
此外,您還可以隨時檢查引薦比如$ _ SERVER [「HTTP_REFERER」],以確保從您的域名只有你的腳本可以訪問它。
它適用於直接訪問,但由於某種原因它沒有與JavaScript一起工作,它仍然死亡 – RussellHarrower 2012-07-14 06:33:13
@RussellHarrower另請參閱:http://stackoverflow.com/questions/2579254/php-does-serverhttp-x-requested -with-exist-or-not有關'HTTP_X_REQUESTED_WITH'的附加信息 – 2012-07-14 06:38:19
如果某人簡單地創建一個包含* X-Requested-With *的自定義HTTP請求會怎麼樣? – Gumbo 2012-07-14 06:39:07
+1這適用於防火牆。 – 2012-07-14 06:49:45