2009-10-06 71 views
2

在編寫登錄模塊時,我想記錄IP作爲驗證另一方仍然是同一個人的附加措施。

我使用$_SERVER['REMOTE_ADDR']作爲獲取遠程機器IP地址的方法之一。除了IPv4或IPv6地址,還有其他值我應該期待這返回?

回答

-2

確實沒有增加安全性來檢查IP地址,因爲這些可能很容易被欺騙,而任何精明的人都可能會攔截POST事務,可能無論如何都會這樣做。

此外,您可能會讓合法用戶感到惱火。想想一個人可能會在有幾個免費開放的wifi熱點的地方。當他們到達您的登錄頁面時,他們可能會連接到一個熱點,但登錄時,他們的機器可能已決定另一個路由器是更好的選擇,因此他們的IP將會改變。信不信由你,這可能會阻止一些(儘管很少有)很容易受挫的用戶。

老實說,我只是不打擾。如果可以的話,使用SSL通常是避免安全問題的最佳方式,例如您所描述的安全問題。祝你的項目好運。

+0

嘿凱爾,感謝您的意見。我只是試圖在用戶信息和驗證正確的證書時徹底。考慮到wifi熱點和用戶可能因爲誤報而惱火的其他領域,這些都是我在設計登錄方案時想要考慮的問題。 – pxl 2009-10-06 19:07:37

+0

優秀。 :-) 很高興能幫上忙。 – KyleFarris 2009-10-06 19:19:08

+0

-1因爲,不,你不能用TCP連接輕易地欺騙IP地址。所以,檢查地址仍然提供一些安全性。 – bortzmeyer 2012-12-28 20:44:00

3

根據PHP在線文檔只能返回一個IP地址。

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

「 'REMOTE_ADDR':

從該用戶正在觀看的當前頁的IP地址。 」

+1

問題是我讀過並看到$ _SERVER ['REMOTE_ADDR']返回多個地址的實例。快速谷歌搜索變成這個鏈接:http://www.bigresource.com/PHP-Why-is-_SERVER-REMOTE_ADDR-returning-multiple-IP-Addresses-Mcv258QQ.html – pxl 2009-10-06 18:17:46

0

該值可以是IPv4或IPv6地址。雖然您可能只會得到規範值,但請注意,IP地址可以通過多種方式寫入。 192.0.2.1192.000.002.001,2001:db8::1相同,2001:db8::12001:0db0:0000:0000:0000:0000:0000:0001等同。如果網絡服務器接受IPv6套接字上的IPv4連接,則IPv4地址甚至可以用IPv6表示法寫入,如::ffff:192.0.2.1::ffff:c000:0201。我在Linux系統上看到了很多。

只要您保留足夠的空間,記錄IP地址不應該是一個問題。實際上,使用IP地址進行訪問控制最近變得越來越棘手。由於世界的大部分地區已經用完了新的IPv4地址,您將看到ISP必須大規模地使用NAT以保持新客戶與IPv4互聯網的連接。這些大規模的NAT將爲成千上萬的客戶使用一個公共IPv4地址池。一個IP地址可以被許多客戶使用,並且一個客戶可能最終使用來自池中的不同地址。

在IPv6跟蹤IP地址有其他事情要考慮。原始IPv6自動配置機制基於將MAC地址用作IPv6地址的一部分。由於隱私問題,大多數操作系統現在使用一種隨機生成的接口標識符(通常是地址的最後64位)用於傳出連接,並且這些位可以隨時間變化。有些操作系統(Mac OS X)甚至統計IPv4或IPv6是否更快,並且我偶爾會看到客戶在IPv4和IPv6之間來回切換。

然後您可以讓用戶從一個無線熱點或辦公網絡漫遊到另一個無線熱點或辦公室網絡,從而切換IP地址。

因此,我認爲根據您想要對數據執行何種操作,記錄IP地址可能是有意義的,但將它們用作訪問控制形式(的一部分)可能會導致比它的價值更大的麻煩。

相關問題