Middleware Pembatasan IP
Middleware pembatasan IP mengizinkan atau menolak request berdasarkan alamat IP klien yang diresolusi. Whitelist didahulukan, blacklist berjalan berikutnya, dan pemeriksaan gagal-aman dengan menolak request apa pun yang IP-nya tidak diketahui. Setiap aturan menerima alamat persis, rentang CIDR, atau wildcard *, dan baik IPv4 maupun IPv6 didukung.
Penggunaan Dasar
Izinkan hanya alamat tepercaya dengan Mware.ip():
import { Mware, Router } from '@neabyte/deserve'
const router = new Router()
// Izinkan hanya alamat terdaftar
router.use(
Mware.ip({
whitelist: [
'127.0.0.1',
'192.168.1.0/24'
]
})
)
await router.serve(8000)Memblokir Alamat
Gunakan blacklist untuk menolak alamat tertentu sambil mengizinkan sisanya:
// Tolak alamat terdaftar, izinkan lainnya
router.use(
Mware.ip({
blacklist: [
'203.0.113.5',
'198.51.100.0/24'
]
})
)Format Aturan
Setiap entri di whitelist atau blacklist bisa berupa salah satu dari ini:
// Alamat IPv4 atau IPv6 persis
'127.0.0.1'
'::1'
// Rentang CIDR
'10.0.0.0/8'
'fc00::/7'
// Wildcard, cocok dengan semua alamat
'*'Aturan yang tidak valid melempar Deno.errors.InvalidData saat middleware dibuat.
Opsi IP
| Opsi | Default | Deskripsi |
|---|---|---|
whitelist | - | Aturan IP, CIDR, atau wildcard yang diizinkan |
blacklist | - | Aturan IP, CIDR, atau wildcard yang ditolak |
Cara Kerja
- IP tidak diketahui - request tanpa IP yang diresolusi ditolak.
- Whitelist ada - hanya IP yang cocok dengan whitelist lolos, selain itu ditolak.
- Blacklist ada - IP yang cocok dengan blacklist ditolak, sisanya lolos.
- Tidak ada yang diatur - setiap request lolos.
Middleware membaca IP klien yang diresolusi dari ctx.get.ip(). Di balik proxy, atur trustProxy supaya IP pengunjung asli yang dipakai.
Penanganan Error
Ketika request ditolak, middleware menghasilkan 403 dan pesan Access denied by IP restriction. Kegagalan itu dialirkan ke error handler terpusat, jadi bentuk response di sana atau andalkan perilaku default. Event ip:denied juga menyala dengan alamat IP yang ditolak, dibahas di Referensi Event.