Ringkasan
- Saat mengambil "Real Client IP" dari header X-Forwarded-For, gunakan IP paling kanan
- IP paling kiri di header XFF biasanya dianggap sebagai yang "paling dekat dengan klien" dan "hampir asli", tetapi bisa dipalsukan (spoofable). Jangan gunakan untuk hal apa pun yang berkaitan dengan keamanan
- Saat memilih IP XFF paling kanan, gunakan instans terakhir dari header tersebut
- Nilai "True Client IP" yang ditetapkan reverse proxy (X-Real-IP, True-Client-IP, dll.) juga cukup baik, tetapi
- bergantung pada bagaimana reverse proxy menetapkan nilai tersebut
- reverse proxy itu sendiri mungkin sudah lebih dulu tertipu (spoofed)
- bergantung pada bagaimana konfigurasi reverse proxy tersebut
- Header yang tidak secara khusus diatur oleh reverse proxy tidak dapat dipercaya
- Contohnya, jika tidak berada di belakang Nginx atau tidak diatur untuk selalu menetapkan (header), jangan membaca header X-Real-IP. Karena Anda bisa saja membaca nilai yang dipalsukan
- Banyak implementasi rate limiter menggunakan IP yang bisa dipalsukan, sehingga rentan terhadap penghindaran rate limiting dan serangan pengurasan memori
- Jika Anda menggunakan sesuatu yang berkaitan dengan "real client ip" di kode atau infrastruktur, lihat pembahasan teknis berikutnya
Detail (karena panjang, hanya judul yang diterjemahkan)
- Pengantar: mencari tahu "real client ip" belakangan ini adalah hal yang mengerikan
- Jebakan
- Header tidak dapat dipercaya
- Banyak header
- IP privat
- Pemecahan IP
- Data yang tidak terenkripsi selalu tidak dapat dipercaya
- Hal-hal seperti X-Client-IP, True-Client-IP dapat dipalsukan
- Memahami X-Forwareded-For
- Menghindari jebakan
- Algoritme untuk mendapatkan IP asli
- Ambil semua nilai IP
- Pilih mana yang akan digunakan sesuai kebutuhan keamanan
- Paling kiri, paling kanan
- Contoh di dunia nyata
- Cloudflare, Nginx, Apache
- Akamai
- Fastly
- Azure
- go-chi/chi
- didip/tollbooth
- ulule/limiter
- sethvargo/go-limiter
- Let's Encrypt
- Express
- Traefik
- phpList
- IIS
- Tor
- Lanjutan: jebakan teoretis dan metode serangan
- RFC 7239: Forwarded HTTP Extension, June 2014
3 komentar
Bagian ini tampaknya sedikit salah terjemah. Teks aslinya seperti berikut.
Misalnya, jika Anda tidak berada di belakang Nginx atau sesuatu lain yang selalu mengaturnya, maka Anda tidak boleh membaca header X-Real-IP. Karena Anda akan membaca nilai yang sudah di-spoof.
Ah, akan saya perbaiki. Terima kasih!
Dengan metode umum, biasanya digunakan variabel lingkungan TRUSTED_PROXY untuk menyingkirkan satu per satu proxy yang "tepercaya" dari sisi paling kanan, lalu memakai IP pertama yang muncul.
Biasanya IP internal (192.168.0.0/16) dan sejenisnya juga diperlakukan sebagai proxy tepercaya.