oleh Vincy. Terakhir diubah pada 7 Mei 2021.

Satu baris skrip PHP sudah cukup untuk mendapatkan alamat IP menggunakan PHP, ‘sebagian besar waktu’.

Pertama saya akan menyajikan kode PHP satu baris, kemudian menunjukkan fungsi kecil yang hampir mencakup sisa kasus. Dilanjutkan dengan diskusi tentang masalah privasi untuk mendapatkan alamat IP.

Artikel ini memiliki yang berikut,

  1. Skrip satu baris untuk mendapatkan alamat IP menggunakan PHP.
  2. Fungsi sederhana untuk mendapatkan alamat IP dalam semua kasus.
  3. Diskusi tentang masalah privasi dalam mendapatkan alamat IP.

Dapatkan alamat IP menggunakan PHP dalam Satu Baris

<?php
    $ipAddress = $_SERVER['REMOTE_ADDR'];
?>

$ _SERVER adalah array PHP yang diatur oleh server. Ada kemungkinan nilai ini belum ditetapkan. Ketahuilah juga bahwa, header ini dapat dengan mudah dipalsukan oleh pengguna dengan menyetel alamat IP sendiri.

Dapatkan alamat IP menggunakan PHP

Mengikuti skrip PHP mencakup sebagian besar skenario dan mengembalikan alamat IP pengguna.

<?php

/**
 * Gets IP address.
 */
function getIpAddress()
{
    $ipAddress="";
    if (! empty($_SERVER['HTTP_CLIENT_IP'])) {
        // to get shared ISP IP address
        $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
    } else if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // check for IPs passing through proxy servers
        // check if multiple IP addresses are set and take the first one
        $ipAddressList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        foreach ($ipAddressList as $ip) {
            if (! empty($ip)) {
                // if you prefer, you can check for valid IP address here
                $ipAddress = $ip;
                break;
            }
        }
    } else if (! empty($_SERVER['HTTP_X_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
    } else if (! empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
        $ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    } else if (! empty($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } else if (! empty($_SERVER['HTTP_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED'];
    } else if (! empty($_SERVER['REMOTE_ADDR'])) {
        $ipAddress = $_SERVER['REMOTE_ADDR'];
    }
    return $ipAddress;
}

echo "IP Address: " . getIpAddress();


Artikel lainnya ditujukan untuk kelengkapan. Jika Anda hanya ingin mendapatkan alamat IP menggunakan PHP, Anda dapat berhenti di sini. Salin skrip di atas dan lanjutkan perjalanan alamat IP Anda.

Cara memvalidasi alamat IP pengguna

Alamat IP dapat dengan mudah dipalsukan. Itu bisa datang dari belakang server proxy. CloudFlare seperti proxy dapat dilibatkan. Localhost dapat mengembalikan alamat IP yang tidak valid. Jadi, jika Anda ingin memvalidasi alamat IP, gunakan skrip di bawah ini.

<?php

/**
 * To validate if an IP address is both a valid and does not fall within
 * a private network range.
 *
 * @param string $ip
 */
function isValidIpAddress($ip)
{
    if (filter_var($ip, FILTER_VALIDATE_IP,
        FILTER_FLAG_IPV4 |
        FILTER_FLAG_IPV6 |
        FILTER_FLAG_NO_PRIV_RANGE |
        FILTER_FLAG_NO_RES_RANGE) === false) {
        return false;
    }
    return true;
}


Diagram alir untuk mendapatkan alamat IP

Flowchart berikut menjelaskan aliran kontrol untuk mendapatkan alamat IP menggunakan PHP.

Dapatkan Diagram Alir Alamat IP

Dapatkan alamat IP pengguna untuk situs web yang dihosting CloudFlare

Ketika situs web di-host menggunakan layanan CloudFlare, $_SERVER['REMOTE_ADDR'] akan mengembalikan alamat IP server CloudFlare dan bukan alamat IP asli pengguna. Jadi dalam situasi seperti itu, Anda dapat menggunakan variabel yang ditetapkan oleh server CloudFlare untuk mendapatkan alamat IP.

Saya telah mengambil CloudFlare sebagai contoh. Ada banyak layanan serupa. Anda perlu berbicara dengan penyedia layanan tersebut untuk mengetahui header permintaan mana yang mereka atur dan mendapatkan alamat IP yang sesuai.

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
        $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
        $ipAddress = $_SERVER['REMOTE_ADDR'];
}


Keandalan alamat IP

$_SERVER['REMOTE_ADDR'] adalah variabel paling andal dari daftar variabel di atas. REMOTE_ADDR mungkin tidak berisi alamat IP asli dari koneksi TCP juga. Itu tergantung pada konfigurasi SAPI.

Jika pengguna berada di belakang server proxy, HTTP_X_FORWARDED_FOR akan diatur. Tetapi ini dapat dengan mudah dipalsukan oleh pengguna dengan menyetel alamat IP yang ingin dia tampilkan.

Bahkan variabelnya X-Forwarded-For atau Client-IP dapat diatur oleh pengguna ke nilai apa pun yang diinginkannya.

Ambil contoh keranjang belanja. Anda dapat menampilkan harga produk sesuai dengan negara pengguna. Dalam skenario seperti itu, Anda dapat menggunakan alamat IP pengguna untuk menentukan negara pengguna. Dalam skenario seperti itu, kode untuk mendapatkan alamat IP pengguna harus sangat mudah dipahami.

Panjang bidang alamat IP

Saat Anda menyimpan alamat IP dalam database, ingatlah untuk memiliki ukuran bidang 45 untuk satu IP. Karena ada kemungkinan untuk alamat IP IPv6. Dalam bentuk lengkapnya, alamat IP IPv6 dapat terdiri dari 45 karakter.

Cara mendapatkan alamat IP dari sebuah host

Dengan menggunakan nama host, kita bisa mendapatkan alamat IP server menggunakan fungsi bawaan PHP gethostbyname. Ini mengembalikan alamat IPv4.

<?php

// to get IP address of a host
$ipAddress = gethostbyname('www.google.com');

echo "Google's IP Address is: " . $ipAddress;

?>

Output untuk mendapatkan alamat IP untuk Google:

Alamat IP Google adalah: 142.250.67.36

Dapatkan nama host menggunakan alamat IP

Kebalikannya juga dimungkinkan dengan menggunakan gethostbyaddr().

Masalah privasi dalam mendapatkan alamat IP pengguna

Alamat IP klien dapat dianggap sebagai informasi pribadi dalam undang-undang tertentu. Itu tergantung pada negara hukum. Anda tidak pernah tahu dari wilayah geografis mana Anda akan mendapatkan pengguna.

Sesuai GDPR (Pasal 4, Poin 1; dan Resital 49), alamat IP adalah data pribadi. Saya akan menyarankan untuk memberi tahu pengguna dan mendapatkan persetujuan untuk mencatat alamat IP. Juga, sebutkan secara eksplisit dalam dokumen “Kebijakan Privasi” Anda.

Nyatakan secara eksplisit bahwa Anda mengumpulkan dan mencatat alamat IP pengguna klien dan alasan melakukannya.

Kesimpulan

Pemahaman yang baik tentang skenario di mana Anda akan mendapatkan alamat IP pengguna itu penting. Kemudian pahami bahwa pengguna akhir dapat dengan mudah memalsukan alamat IP-nya. Ketiga memahami setiap variabel server, dari mana alamat IP diambil. Terakhir, sebutkan secara eksplisit dalam kebijakan privasi Anda bahwa Anda mendapatkan alamat IP pengguna klien.

↑ Kembali ke Atas



Source link