Cara Mendapatkan Alamat IP Pengguna Klien di PHP
Ini adalah topik yang cukup sederhana. Hanya beberapa baris kode PHP yang akan berfungsi untuk mendapatkan alamat IP pengguna klien.
Satu baris kode php berikut untuk mendapatkan alamat IP
$_SERVER['REMOTE_ADDR'];
$_SERVER adalah array PHP yang diatur oleh server. Tergantung pada kode PHP satu baris ini mungkin tidak memberikan hasil terbaik dalam banyak situasi. Misalnya, jika klien berada di belakang server proxy, maka variabel ini tidak akan cocok. Perlu diketahui juga bahwa, header ini dapat dengan mudah dipalsukan oleh pengguna dengan mengatur sendiri alamat IP.
Skrip PHP berikut mencakup sebagian besar skenario dan mengembalikan alamat IP pengguna.
isValidIpAddress($_SERVER['HTTP_CLIENT_IP'])) {
// check for shared ISP IP
$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 ($this->isValidIpAddress($ip)) {
$ipAddress = $ip;
break;
}
}
} else if (! empty($_SERVER['HTTP_X_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_X_FORWARDED'])) {
$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
} else if (! empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
$ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
} else if (! empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
} else if (! empty($_SERVER['HTTP_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED'])) {
$ipAddress = $_SERVER['HTTP_FORWARDED'];
} else if (! empty($_SERVER['REMOTE_ADDR']) && $this->isValidIpAddress($_SERVER['REMOTE_ADDR'])) {
$ipAddress = $_SERVER['REMOTE_ADDR'];
}
return $ipAddress;
}
/**
* To validate if an IP address is both a valid and does not fall within
* a private network range.
*
* @access public
* @param string $ip
*/
public 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;
}
}
?>
Ada banyak opsi yang diberikan sepanjang artikel ini untuk mendapatkan alamat IP pengguna klien. Ini adalah yang terbaik di antara semua kemungkinan yang diberikan, tetapi saya sangat menyarankan Anda untuk membaca bagian “keandalan alamat IP” di bawah ini.
Flowchart untuk mendapatkan alamat IP pengguna klien

Kode minimal untuk mendapatkan alamat IP pengguna
Di bawah satu kode baris akan berfungsi di sebagian besar situasi. Baca bagian 'keandalan alamat IP' di bawah ini, harus. Ini akan memberi Anda ide yang bagus.
$ipAddress = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
Dapatkan alamat IP pengguna untuk situs web yang dihosting CloudFlare
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.
Ketika situs web di-host menggunakan layanan CloudFlare, $_SERVER['REMOTE_ADDR'] akan mengembalikan alamat IP server CloudFlare dan bukan alamat IP pengguna. Jadi dalam situasi seperti itu, Anda dapat menggunakan variabel yang ditetapkan oleh server CloudFlare untuk mendapatkan alamat IP.
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 yang paling dapat diandalkan dari daftar variabel di atas. REMOTE_ADDR mungkin juga tidak berisi alamat IP asli dari koneksi TCP. Itu tergantung pada konfigurasi SAPI.
Jika pengguna berada di belakang server proxy, HTTP_X_FORWARDED_FOR akan disetel. Tapi ini dapat dengan mudah dipalsukan oleh pengguna dengan mengatur alamat IP yang ingin dia ekspos.
Bahkan variabel X-Forwarded-For atau Client-IP dapat diatur oleh pengguna ke nilai apa pun yang diinginkannya. Jadi, saat Anda menyimpan log alamat IP pengguna, sebaiknya simpan juga alamat IP yang dikembalikan oleh $_SERVER['REMOTE_ADDR'].
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.
Jadi secara ringkas, jika Anda sedang membangun aplikasi mission critical yang bergantung pada alamat IP pengguna, maka ini bukanlah cara yang tepat. Untuk log audit alamat IP pengguna, ini mungkin cukup. Intinya, pahami setiap baris kode PHP ini dan variabel yang digunakan. Ketahui kasus penggunaan Anda dengan baik dan gunakan sesuai dengan itu.
Panjang bidang alamat IP
Saat Anda menyimpan alamat IP dalam database, ingatlah untuk memiliki ukuran bidang sebagai 45 untuk satu IP. Karena ada kemungkinan untuk alamat IP IPv6. Ini bentuk lengkapnya alamat IP IPv6 bisa menjadi 45 karakter.
Cara mendapatkan alamat IP dari sebuah host
Dengan menggunakan nama host, kita bisa mendapatkan alamat IP server menggunakan fungsi gethostbyname bawaan PHP. Ini mengembalikan alamat IPv4 untuk host yang diberikan dalam argumen.
$ipAddress = gethostbyname('www.example.com');
Kebalikannya juga dimungkinkan dengan menggunakan gethostbyaddr().
Alamat IP dan masalah privasi pengguna klien
Alamat IP Klien dapat dianggap sebagai informasi pribadi dalam undang-undang tertentu. Itu tergantung pada tanah hukum. Internet adalah publik pada umumnya. 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
Pahami kasus penggunaan Anda dengan baik. Pemahaman yang baik tentang skenario di mana Anda akan mendapatkan dan menggunakan alamat IP pengguna klien adalah penting. Kemudian pahami bahwa pengguna akhir dapat dengan mudah memalsukan alamat IP-nya dan memberi Anda sesuatu yang lain. Ketiga, pahami setiap baris kode, variabel server, dari mana alamat IP diambil, siapa yang menetapkannya, dll. Kemudian putuskan bagaimana hal itu akan memengaruhi kasus penggunaan Anda. Last but not least, secara eksplisit sebutkan dalam kebijakan privasi Anda bahwa Anda mendapatkan alamat IP pengguna klien dan menyimpannya. Nyatakan juga mengapa Anda melakukannya. Sesuai GDPR, alamat IP adalah informasi pribadi pengguna sehingga akan lebih baik untuk mendapatkan persetujuan pengguna sebelum memprosesnya.
Penulis: Ade Suryadi
Tanggal: 07 Agustus 2021