2013-11-25 20 views
0

我有一個只能訪問少數「白名單」的遠程服務器的Web服務(它返回數據)。因此,當遠程服務器向我的服務器發送請求時,我會檢查$_SERVER['HTTP_REFERER']字段中的白名單域名和相應的IP地址(我的web服務通過全局數組已知該地址)。這種白名單請求的方法可以繞過嗎? 我知道這很容易實現引用欺騙......但請記住,我正在檢查引用者和相應的IP地址,這兩者都是我的應用程序已知的確定性。使用HTTP_REFERER和IP地址對引用網站進行身份驗證

如果這不是一件安全的事情,是否有人有一種替代方法只允許「列入白名單」的域訪問給定的Web服務?

+0

只是爲了清楚起見:您正在將請求客戶端的遠程IP與引用主機的IP進行比較? – DaSourcerer

+0

您正在查看* what *的IP嗎?你得到的是* referer * HTTP頭,它只有域名,很容易被欺騙,你知道訪問客戶端的IP地址。他們不是一回事。 – deceze

+0

我想我迷惑了讀者。 「客戶端」實際上是一個遠程服務器,它具有與其關聯的域名以及IP地址。而我的網頁是一個真正的網絡服務,將數據返回給調用者.....我應該更清楚:)我已經編輯了我的問題以上併入此。 – Nikster2014

回答

1

正如已評論的,我不確定爲什麼HTTP Referer頭部會設置在您的方案的第一位,但讓我們假設它是和它的域對應於客戶端的IP。 Referer頭部是由客戶端發送的任意值,它是微不足道的。客戶端的IP OTOH不是可僞造的(不包括需要攻擊者基本上已經損害一方或另一方的精心網絡級攻擊)。你所要問的是,用一種不安全,毫無意義的價值來確認一個已經儘可能安全的價值是否有意義。答案是否定的。只要堅持IP過濾器,這已經足夠好了。

如果您想進一步加強身份驗證,請使用適當的身份驗證方案,與您的客戶端共享密碼(用戶名/密碼,API令牌,Oauth或類似密碼)。

1

我不相信檢查Referer HTTP標題除了始發IP地址產生任何安全的好處。話雖如此,基於IP的身份驗證本身不是safest practice。如果你真的想保護你的API,最好看看SSL和某種形式的HTTP authentication

相關問題