Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mendapatkan Alamat IP Tepat Pengguna dalam PHP?

Bagaimana untuk Mendapatkan Alamat IP Tepat Pengguna dalam PHP?

Barbara Streisand
Barbara Streisandasal
2024-12-17 00:47:25180semak imbas

How to Get a User's Accurate IP Address in PHP?

Cara Menentukan Alamat IP Pengguna dengan Tepat dalam PHP

Pengenalan

Mengambil semula pengguna alamat IP yang tepat dalam PHP adalah penting untuk aplikasi yang bergantung pada Geolokasi berasaskan IP, pengesanan penipuan, atau kawalan akses. Walau bagaimanapun, mengekstrak alamat IP yang betul boleh mencabar kerana penggunaan proksi, pengimbang beban dan konfigurasi rangkaian lain.

Amalan Terbaik untuk Mendapatkan Alamat IP

Sementara tiada kaedah yang maksum, terdapat konsensus umum mengenai pendekatan yang paling tepat untuk PHP:

Menggunakan Pembolehubah $_SERVER

PHP menawarkan beberapa pembolehubah $_SERVER yang berpotensi mengandungi alamat IP maklumat:

  • HTTP_CLIENT_IP
  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_X_CL USTER_CLIENT_IP
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • REMOTE_ADDR

Pengesahan dan Kebolehpercayaan

Bukan semua pembolehubah $_SERVER boleh dipercayai sama. HTTP_CLIENT_IP dan REMOTE_ADDR selalunya paling boleh dipercayai, manakala HTTP_X_FORWARDED_FOR boleh ditipu dengan mudah.

Kod Dioptimumkan untuk Pengambilan IP Tepat

Berikut ialah kod yang dioptimumkan yang mengambil kira snippet semua $_SERVER yang berkaitan pembolehubah:

function get_ip_address() {
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        foreach ($iplist as $ip) {
            if (filter_var(trim($ip), FILTER_VALIDATE_IP)) {
                return $ip;
            }
        }
    }

    return $_SERVER['REMOTE_ADDR'];
}

Kelayakan berkenaan REMOTE_ADDR

Walaupun REMOTE_ADDR umumnya boleh dipercayai, ia masih terdedah kepada penipuan. Untuk aplikasi yang memerlukan ketepatan IP mutlak, pertimbangkan untuk menggunakan kaedah pengesahan yang lebih ketat, seperti memeriksa sijil pelanggan atau pangkalan data reputasi IP.

Pertimbangan Tambahan

  • Sahkan Julat IP: Gunakan filter_var() dengan FILTER_FLAG_NO_PRIV_RANGE dan FILTER_FLAG_NO_RES_RANGE untuk membuang alamat IP peribadi dan terpelihara.
  • Sahkan Alamat IPv6: Jika anda menjangkakan trafik IPv6, ubah suai kod pengesahan untuk mengendalikan alamat IPv6 juga.
  • Pertimbangkan Proksi Pengesanan: Laksanakan langkah tambahan untuk membenderakan dan mengendalikan trafik proksi, kerana proksi boleh memesongkan pengambilan alamat IP.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Alamat IP Tepat Pengguna dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn