首頁  >  文章  >  後端開發  >  PHP如何才能取得真實IP

PHP如何才能取得真實IP

PHPz
PHPz原創
2022-06-14 19:46:393359瀏覽

PHP如何才能取得真實IP

在PHP中,常見取得請求IP的方式一般是透過3個超全域變量,不過很明顯三種取得IP的方式並不完全可靠。

$_SERVER['REMOTE_ADDR'];             // 客户端与服务器握手IP,如果使用代理则会获取到代理IP
$_SERVER['HTTP_CLIENT_IP'];          // 代理服务器发送的HTTP头(可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR'];    // 用户是在哪个IP使用的代理(可伪造)

如果網域沒有經過代理,一般穩健的方式是REMOTE_ADDR,如果是海外網路最穩健的方式是雲端廠商提供可靠的來源IP取得方式,如Google雲端提供的:

PHP如何才能取得真實IP

當沒有出現偽造IP時,X-forwarded-For 一般是客戶端真實IP,負載平衡IP

#當出現偽造IP時,Google雲端將偽造的內容進行前置,格式是,客戶端真實IP,負載平衡IP

所以無論是否偽造,我們都可以透過逗號切割字串,找到倒數第二個X-forwarded- for的值,就可以取得到真實客戶端IP。

當然,如果域名雲廠商沒有提供類似的域名信息,我們就無法簡單透過超全局變數進行獲取了。

當網域雲端廠商沒有提供對應的請求來源IP資訊時,這時我們也可以透過服務端互動雙方協商確認機制。

類似:在HTTP請求頭加入來源IP資訊進行判斷,由於是服務端之間的通訊過程,偽造方無法知道偽造的特定資訊內容,因此通常情況下這樣的互動是可靠的。

判斷邏輯流程

服務端A: HTTP請求頭加入變數MY_REALIP_c32fsjk234 => “1.2.3.4”,這時要注意,變數名稱盡量不要太簡單,並且最好雙方約定一個隨機密鑰作為變量名稱,類似MY_REALIP_c32fsjk234

接受請求端B: 透過$_SERVER['MY_REALIP_c32fsjk234'] 判斷請求頭是否包含MY_REALIP_c32jfsk234 變量IP作為真實IP。

原文連結:https://blog.csdn.net/panguangyuu/article/details/122211682

推薦閱讀:

php教程

以上是PHP如何才能取得真實IP的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn