2009-01-09 72 views
18

是否可以使用PHP檢查誰正在進入您的網站。我有一個Web應用程序(用PHP編寫)應該只允許用戶從某些特定網站進入。是否可以通過檢查_Request對象來獲取推薦網站?如果是,如何?檢查PHP中的推薦人

回答

29

是的,但請記住一些代理和其他東西將這些信息剝離出來,並且可以很容易僞造。所以永遠不要依賴它。例如,請不要認爲您的網絡應用程序安全性可以從CSRF以上,因爲您檢查了引用來匹配您自己的服務器。

$referringSite = $_SERVER['HTTP_REFERER']; // is that spelt wrong in PHP ? 

如果您只想允許來自特定域的請求,則需要解析一些URL以獲取頂級域名。正如我學到的更多,這可以用PHP的parse_url()完成。

由於andyk在評論中指出,您還必須允許www.example.com和example.com。

+0

雖然可能需要格外小心,因爲您可能需要同時允許www.example.com和example.com,因爲它在大多數情況下都是相同的。更何況HTTP_REFERER不是真的可信。 – andyk 2009-01-09 02:27:02

+1

from the php manual「,這是由用戶代理設置的,不是所有的用戶代理都會設置它,有些提供修改HTTP_REFERER作爲一個功能的能力,簡而言之,它不能真正被信任。 – andyk 2009-01-09 02:28:07

0

您需要檢查'HTTP_REFERER'鍵的$ _SERVER數組。

6

雖然您可以查看$_SERVER['HTTP_REFERER']以獲取引薦網站,但不要在該網站上投注農場。瀏覽器設置了這個頭文件,很容易被欺騙。

如果只有來自特定引薦來源的人查看您的網站至關重要,請不要使用此方法。您必須找到另一種方式來保護您的內容,例如基本身份驗證。我並不是說你不應該使用這種技術,只要記住它不是傻瓜。

順便說一下,你也可以阻止在Apache級別using mod_rewrite的引用。

4

你不能相信推薦人。儘管來自$_SERVER陣列,它實際上是一個用戶/瀏覽器提供的值,並且很容易被僞造,使用諸如Firefox RefControl addon之類的東西。