今天就跟大家聊聊有關如何獲取用戶的Ip地址,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
分析過程
代碼如下:
function getIP() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
return $realip;
}
這個是網上常見獲取,ip函數,用這些值獲取IP,我們首先要弄清楚,這些數據是從那個地方傳過來的。
IP獲取來源
1.'REMOTE_ADDR' 是遠端IP,默認來自tcp 連接是,客戶端的Ip??梢哉f,它最準確,確定是,只會得到直接連服務器客戶端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協議進行擴展。定義了實體頭。
HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分割。 HTTP_CLIENT_IP 在高級匿名代理中,這個代表了代理服務器IP。既然是http協議擴展一個實體頭,并且這個值對于傳入端是信任的,信任傳入方按照規則格式輸入的。以下以x_forword_for例子加以說明,正常情況下,這個值變化過程。
分析Bug風險點:
通過剛剛分析我們發現,其實這些變量,來自http請求的:x-forword-for字段,以及client-ip字段。 正常代理服務器,當然會按rfc規范來傳入這些值。但是,當一個用戶直接構造該x-forword-for值,發送給用戶用戶,那將會怎么樣呢?
圖(1)
第2步,修改x-forword-fox值,我們看看結果

第三步,我們再修改下看看會怎么樣?

看完上述內容,你們對如何獲取用戶的Ip地址有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。