2010-10-01 84 views
4

我正在檢索IP地址以進行跟蹤,這不是用戶既不輸入也不用於除跟蹤用戶訪問網站的次數之外的任何其他原因。爲什麼要驗證IPAddress?

該地址存儲在數據庫中,用於查看客戶端之前是否在該站點上。

所以問題是IP地址可以惡意使用嗎?除了「欺騙」之外。

+3

立即確認,稍後再放心。 – Stephen 2010-10-01 21:16:44

+1

如何獲得此IP地址? – 2010-10-01 21:34:20

+0

這是在C#所以我使用的是Request.UserHostAddress – 2010-10-01 21:42:11

回答

1

驗證的大多數原因不適用; IP將來自一個Request屬性,該屬性由底層連接中的信息構建而成,這些信息已經在很大程度上進行了驗證,因此雖然可能被欺騙,但它不能被僞造成實際上不是IP地址的東西。

但是,仍有兩個原因。一個是,安全方面的不信任不只是意圖,而且也是成功的;我們可以信任給予我們IP地址的圖層,而不是故意給我們其他東西,但是我們不一定會相信它會在自己的檢查中取得成功 - 也許有一天會發現一種利用這種技術來詭計的方法。另一個是,根據你要用這個IP做什麼,也許欺騙性的IP可能會造成一些損害(這需要驗證,而不僅僅是驗證IP是IP)。

反說法是,如果您所做的只是記錄,那麼只要您使用常規方法來確保數據的格式化,記錄惡意代碼本身不會做任何討厭的事情。

一個反駁的觀點是,如果你現在唯一做的事情就是記錄今天,那麼在項目的整個生命週期中,這可能並非如此。

因此,總而言之,驗證是合理的,儘管如果我看到有人沒有這樣做,我就不會嚇壞了。

務必小心確保您的驗證接受IPv6地址;它們仍然非常稀少,以至於您的測試可能不會使用任何測試,但足夠常見(並且越來越常見),您將在生產代碼中使用它們。您不希望因爲遇到IPv6地址而阻止合法用戶。

0

我想不出一種方式來注入任何頑皮的字符,但我想這是你如何得到他們的IP地址。

永遠不要信任你的用戶,尤其是涉及到數據庫時。

1

如果您沒有驗證您放入數據庫的數據,最終可能會收到惡意數據(XSS,SQL注入等)。

確保在將數據放入數據庫之前數據是乾淨的,因爲您不知道明天會使用什麼。

3

我認爲你應該驗證IP地址被存儲在之前的數據庫,因爲:

從HTTP請求和數據庫存儲檢索並不總是相互靠近的代碼。因此,在將來的某個時候,有人可能會使用錯誤的數據調用數據庫存儲方法。如果您現在編寫代碼來驗證它,那麼您將來不太可能處理問題。

0

如果您只是使用從請求中獲取的IP地址,那麼沒有什麼可擔心的。開始考慮驗證的時間是,如果您通過代理服務器獲取流量,並且您想要用戶的IP地址而不是代理服務器的IP地址。這是由使用X-Forwarded-For標頭的代理服務器處理的,並且這個很容易被欺騙,所以在這裏用一點鹽和一點驗證來取任何值。

相關問題