Prinsip Dasar Keamanan Middleware Next.js
Middleware dalam Next.js berjalan di Edge Runtime sebelum permintaan (request) mencapai halaman atau API route. Keamanan middleware berfokus pada validasi token, kontrol akses (RBAC), dan pencegahan akses tidak sah ke resource sensitif. Karena berjalan di Edge, middleware harus ringan dan tidak boleh melakukan operasi berat yang memblokir event loop.
Implementasi Autentikasi dan Proteksi Rute
Gunakan middleware untuk memverifikasi token JWT atau session sebelum mengizinkan akses ke rute tertentu. Berikut adalah contoh implementasi dasar untuk memproteksi rute /dashboard:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const token = request.cookies.get('auth_token');
if (request.nextUrl.pathname.startsWith('/dashboard') && !token) {
return NextResponse.redirect(new URL('/login', request.url));
}
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*'],
};Matriks Keamanan Middleware
| Fitur Keamanan | Tujuan | Metode Implementasi |
|---|---|---|
| Authentication | Verifikasi identitas user | JWT Verification / Session Cookie |
| Authorization | Kontrol akses per role | RBAC (Role-Based Access Control) |
| Rate Limiting | Mencegah brute force | Upstash Redis / Edge Config |
| Security Headers | Proteksi browser | NextResponse.headers.set() |
| Bot Detection | Mencegah scraping | User-Agent / IP Filtering |
Strategi Mitigasi Serangan
Untuk meningkatkan postur keamanan, terapkan langkah-langkah berikut:
- Security Headers: Selalu tambahkan header seperti
Content-Security-Policy,X-Content-Type-Options, danStrict-Transport-Securitymelalui middleware. - Edge Rate Limiting: Gunakan layanan seperti Upstash Redis untuk membatasi jumlah request per IP guna mencegah serangan DDoS skala kecil atau brute force pada endpoint login.
- Validasi Input: Meskipun middleware bukan tempat utama untuk validasi data, gunakan untuk memblokir request yang memiliki payload mencurigakan atau header yang tidak sesuai standar.
- Environment Variables: Jangan pernah menyimpan secret key secara hardcode. Gunakan
process.envdan pastikan variabel tersebut terenkripsi di platform deployment (Vercel/Netlify).
Troubleshooting Umum
Jika middleware menyebabkan redirect loop, periksa kembali logika matcher dan pastikan rute login tidak ikut terproteksi oleh middleware itu sendiri. Gunakan request.nextUrl.pathname untuk mengecualikan rute publik dari pengecekan autentikasi.