it-swarm-id.com

Bisakah saya mempercayai IP sumber dari permintaan HTTP?

Sejauh yang saya mengerti, jika Anda mencoba untuk mengeluarkan permintaan HTTP dengan alamat IP palsu, maka handshake TCP gagal, jadi tidak mungkin untuk menyelesaikan permintaan HTTP, karena SYN/ACK dari server tidak mencapai klien jahat ...

... dalam kebanyakan kasus. Tapi mari sekarang sebagian besar mengabaikan empat kasus ini:
- Serangan manusia di tengah (MITM)
- Kasus ketika klien jahat mengontrol jaringan server Web
- Kasus ketika klien jahat memalsukan IP lain di jaringan lokalnya sendiri
- Serangan BGP

Maka saya memang bisa mempercayai alamat IP dari permintaan HTTP?

Latar Belakang: Saya sedang berpikir tentang membangun peta alamat IP dan penggunaan sumber daya, dan memblokir alamat IP yang mengonsumsi terlalu banyak sumber daya. Tapi saya bertanya-tanya apakah ada, misalnya, beberapa cara untuk memalsukan jumlah tak terbatas dari alamat IP (dengan menerbitkan permintaan HTTP yang berhasil dengan IP palsu), sehingga server Web sumber daya-penggunaan-oleh-IP- buffer tumbuh besar dan menyebabkan kesalahan kehabisan memori.

(Hmm, mungkin router Internet jahat bisa memalsukan sangat banyak permintaan. Tapi mereka tidak jahat kan. (Ini akan menjadi serangan MITM? Itu sebabnya saya katakan kebanyakan abaikan, di atas))

41
KajMagnus

Ya (dengan asumsi Anda mengabaikan klien dapat mencegat kembalinya jabat tangan pada IP palsu) jika Anda melakukan sesuatu dengan benar. Permintaan HTTP dilakukan melalui TCP; sampai jabat tangan selesai server web tidak mulai memproses permintaan HTTP. Memberi pengguna acak dapat mencoba menipu ujung jabat tangan; tetapi karena mereka harus menebak server menghasilkan ACK, mereka seharusnya hanya memiliki peluang 1 in 2 ^ 32 (~ 4 miliar) untuk melakukannya dengan sukses setiap kali.

Saat Ladadadada berkomentar pastikan Anda tidak mengambil nilai yang salah dari alamat IP jarak jauh di aplikasi web Anda. Anda menginginkan alamat IP dari header datagram IP (khususnya, alamat IP sumber). Anda tidak ingin nilai-nilai seperti X-Forwarded-For/X-Real-IP yang dapat ditempa secara sepele karena mereka diatur dalam header HTTP. Pasti menguji dengan mencoba menipu beberapa alamat IP; dengan say a plugin browser atau secara manual dengan telnet yourserver.com 80.

Tujuan dari bidang ini adalah agar proksi web (yang mungkin mengatakan konten cache untuk melayani lebih cepat) dapat berkomunikasi dengan webservers alamat IP asli pengguna daripada proksi alamat IP (yang mungkin untuk ratusan pengguna). Namun, karena siapa pun dapat mengatur bidang ini, itu tidak boleh dipercaya.

23
dr jimbob

Dapatkah saya mempercayai IP sumber dari permintaan HTTP?

Anda dapat yakin bahwa alamat IP sumber permintaan HTTP adalah alamat sumber koneksi TCP yang menghasilkan permintaan tersebut.

Kapan mempercayai alamat IP adalah pertanyaan rumit konteks-spesifik, tetapi sebenarnya bukan itu yang Anda tanyakan.

Anda khawatir tentang dampak penggunaan/penerapan batas tarif per-IP pada lapisan aplikasi dan kerentanan tambahan apa pun terhadap serangan penolakan layanan?

Saya ingin tahu apakah melakukan itu, di lapisan aplikasi, memperkenalkan kerentanan tambahan, ya.

Itu sepenuhnya tergantung pada implementasi Anda, baik kebijakan dan teknologi.

  • Sumber daya seperti apa yang Anda inginkan untuk menilai konsumsi batas?
  • Apa yang ingin Anda capai dengan membuat batas nilai ini?
  • Selama periode waktu apa Anda ingin melakukan akuntansi?
  • Di mana Anda ingin menerapkan batas?
  • Apakah alamat IP kunci terbaik untuk batas tarif?
  • Apa kemungkinan alasan untuk konsumsi berlebih?
  • Apa yang harus pengalaman pengguna jika terjadi konsumsi berlebihan?

Bergantung pada jawaban atas pertanyaan-pertanyaan ini, batas tarif mungkin lebih baik ditempatkan di tempat lain dalam infrastruktur layanan, mis. firewall khusus, firewall lokal. Atau jika akses diautentikasi, maka kredensial yang diautentikasi mungkin menjadi kunci yang lebih baik untuk akuntansi tarif dan batasan Anda akan ditentukan.

2
MattH

Apa gunanya mengeluarkan SYN palsu ke server HTTP jika Anda tidak bermaksud melanjutkan jabat tangan TCP? Server web Anda tidak akan melihat permintaan HTTP kecuali jika (mungkin dipalsukan) klien mendapatkan SYN/ACK, dan terus membuat sesi TCP, dan mengirimkan permintaan HTTP.

Simpan database pada disk, struktur dengan cerdik (seperti pohon) untuk pencarian cepat.

Jika klien dipalsukan atau tidak, apakah itu benar-benar membuat perbedaan untuk Anda? Jika mereka berperilaku salah, mereka berperilaku buruk, tidak peduli apakah mereka dipalsukan atau tidak.

Dari sudut pandang server web, saya akan mempertimbangkan IP jarak jauh sebagai IP jarak jauh yang sebenarnya.

1
MattBianco