這個來自一些專案中,獲取使用者ip,進行使用者操作行為的記錄,是常見並且經常使用的。 一般朋友,都會看到如下通用獲取ip位址方法。
1.』remote_addr』 是遠端ip,預設來自tcp 連線是,客戶端的ip。可以說,它最準確,確定是,只會得到直接連伺服器客戶端ip。如果對方通過**伺服器上網,就發現。獲取到的是**伺服器ip了。
如:a->b(proxy)->c ,如果c 通過』remote_addr』 ,只能獲取到b的ip,獲取不到a的ip了。
另外:該ip想篡改將很難實現,在傳遞知道生成php server值,都是直接生成的。
2.』http_x_forwarded_for』,』http_client_ip』 為了能在大型網路中,獲取到最原始使用者ip,或者**ip位址。對http協議進行擴充套件。定義了實體頭。
上面getip函式,除了客戶端可以任意偽造ip,並且可以傳入任意格式ip。 這樣結果會帶來2大問題,其一,如果你設定某個頁面,做ip限制。 對方可以容易修改ip不斷請求該頁面。 其二,這類資料你如果直接使用,將帶來sql註冊,跨站攻擊等漏洞。至於其一,可以在業務上面做限制,最好不採用ip限制。 對於其二,這類可以帶來巨大網路風險。我們必須加以糾正。
需要對getip 進行修改,得到安全的getip函式。
這類問題,其實很容易出現,以前我就利用這個騙取了大量偽裝投票。有它的隱蔽性,其實只要我們搞清楚了,某些值來龍去脈的話。理解了它的原理,修復該類bug將是非常容易。
題外話,做技術,有三步,先要會做,會解決;後要思考為什麼要這麼做,原因原理是什麼;最後是怎麼樣做,有沒有其它方法。多問問自己,你發現距離技術真理越來越近。你做事會越來越得心應手的!
獲取使用者的ip位址
程式處理中使用了方法 request.getremoteaddr 來獲取使用者的ip位址,但是這個ip位址容易被欺騙.並且在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。或者內網服務就在域控機器上,由於安裝了域控,拓撲結構發生變化,這時這個方法獲取的ip都為伺服器自身...
PHP獲取使用者IP位址
開發中時常需要獲取到來訪使用者的ip 位址,在php中主要通過超全域性變數 server裡邊的值來獲取,方法如下 獲取使用者ip位址 param integer type 返回型別 0 返回ip位址 1 返回ipv4位址數字 param boolean adv 是否進行高階模式獲取 有可能被偽裝 i...
JSP如何獲取使用者的真實IP位址
在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了 apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用 request.getremoteaddr 方法獲取的ip位址是 1...