2011-01-08 49 views
1

我有一個service.php類,我用它來服務來自我的網站的AJAX調用。爲了防止其他人使用PHP CURL訪問服務,我通常會檢查請求是否來自mysite,如果他們不是,那麼只是重定向到我的主頁,例如如何可靠地檢查對我的服務文件的請求是否來自我的網站?

if($_SERVER['HTTP_REFERER'] != "http://www.mysite.com"){ 
    header('location: http://www.mysite.com'); 
    exit; 
} 

我在PHP聖經閱讀:

http://www.php.net/manual/en/reserved.variables.server.php

「不是所有的用戶代理都會設置這個,有的提供能力修改HTTP_REFERER作爲一項功能,簡而言之,它不能真正被信任。「

因此,如果這種方法不可靠,我的問題是如何可靠地檢查對我的服務文件的請求是否來自我的網站?

感謝您提供任何幫助!

+0

答案很簡單:你**不能**。即使你暫時阻止了一個小偷,他也會來這裏進行堆棧轉換,並獲得完整而準確的解決方案,以避免它。 – 2011-01-08 10:39:01

+0

只要'woot586'不在這裏發佈他的祕密字符串,他會沒事的我想? – Nanne 2011-01-08 10:40:59

回答

1

您需要創建一個小會話cookie,其中包括頁面請求的時間,請求者的IP地址和一些不時變化的祕密字符串(即有效時間爲一個小時左右)。該cookie必須加密。現在,當進行AJAX調用時,您檢查cookie,比較IP,檢查祕密字符串並相應採取行動。

但要說實話,這會讓黑客的任務變得更加複雜,但並非不可能。所以你需要在這個等式中加入HTTPS,即使這樣,客戶端計算機上的優秀代理人也會提出虛假請求。但是對於大多數場景,上述+ HTTPS會驅使攻擊者離開。

1

你不容易我想。你可以做的是讓你自己的文件總是發佈某種密碼。假設你發送了一些數據(日期時間?),並且散列值爲

只有你知道secrettstring,只有你可以創建散列。使用收到的日期時間在第二個文件中重新創建散列,並檢查發送的散列是否正確。

來自其他網站的請求不會有你的散列和日期時間,或者至少不是正確的。

相關問題