首頁 > 後端開發 > php教程 > PHP如何準確取得使用者的IP位址?

PHP如何準確取得使用者的IP位址?

Patricia Arquette
發布: 2024-12-24 07:25:13
原創
591 人瀏覽過

How Can I Accurately Get a User's IP Address in PHP?

如何在PHP 中準確檢索使用者的IP 位址

由於使用,在PHP 中擷取使用者的IP 位址可能是一項具有挑戰性的任務代理和其他可能掩蓋真實IP 位址的因素。雖然有多種方法可用,每種方法都有其局限性,但了解最有效的方法可以確保準確的 IP 檢索。

一個常見的方法是利用 $_SERVER 全域變數。它提供了可能包含 IP 資訊的各種標頭。其中,REMOTE_ADDR保存的是最後一個已知客戶端的IP位址;然而,這種方法並不可靠,因為它很容易被欺騙。

為了解決這個問題,PHP 開發人員開發了更全面的方法,利用多個 $_SERVER 標頭。此方法涉及透過 HTTP_CLIENT_IP 檢查共用網際網路/ISP IP 位址。此外,它也透過 HTTP_X_FORWARDED_FORHTTP_X_FORWARDEDHTTP_X_CLUSTER_CLIENT_IPHTTP_X_CLUSTER_CLIENT_IPHTTP_X_CLUSTER_CLIENT_IP

HT、FORHTTP_FORWARDED.假設這些標頭之一將提供更準確的 IP 位址。為了確保有效性,函數

validate_ip

用於過濾掉私有網路和無效IP位址。
function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}
登入後複製

這是問題中提供的程式碼的簡化版本:

雖然這種方法顯著提高了準確性,但它仍然容易受到可能注入自己的請求標頭的惡意用戶的影響。對於關鍵任務應用程序,建議僅依賴 REMOTE_ADDR。

以上是PHP如何準確取得使用者的IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板