2008-11-25 104 views
3

比方說,我們正在跟蹤最終用戶IP的網絡服務:Request.ServerVariables(「REMOTE_ADDR」)與Request.ServerVariables(「HTTP_X_FORWARDED_FOR」)的安全隱患

ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
If ip = "" Then 
    ip = Request.ServerVariables("REMOTE_ADDR") 
End If 

我讀過這是檢索最終用戶IP的最佳方法,因爲它甚至適用於透明代理上的用戶。

如果我們使用最終用戶IP地址來過濾惡意用戶,那麼上述方法是否存在安全隱患,而不是使用Request.ServerVariables(「REMOTE_ADDR」)?

例如,如果我們通過最終用戶IP來禁止惡意用戶,他們是否可以通過代理輕鬆更改IP並繼續使用我們的Web服務?

在此先感謝您的幫助。

回答

9

REMOTE_ADDR由Web服務器根據客戶端的連接生成。 HTTP_X_FORWARDED_FOR基於客戶端發送的HTTP頭。

您不能信任來自客戶端的輸入,特別是容易被僞造的輸入,例如HTTP標頭。客戶可以將任何東西轉換成HTTP_X_FORWARDED_FOR標題。

0

如果用戶使用的是透明代理,那麼上面的代碼會得到真正的IP地址。如果他們使用匿名代理,但是(如Anonymizer)那麼真的沒有辦法獲得用戶的真實IP地址。

相關問題