21 poin oleh xguru 2022-03-07 | 3 komentar | Bagikan ke WhatsApp

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

 
tribela 2022-03-08

Misalnya, jika berada di belakang Nginx, atau kecuali jika secara khusus selalu diatur, header X-Real-IP tidak boleh dibaca. Karena Anda bisa saja membaca nilai yang sudah di-spoof.

Bagian ini tampaknya sedikit salah terjemah. Teks aslinya seperti berikut.

For example, you must not check the X-Real-IP header if you’re not behind Nginx or something else that always sets it, because you’ll be reading a spoofed value.

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.

 
xguru 2022-03-08

Ah, akan saya perbaiki. Terima kasih!

 
tribela 2022-03-08

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.