Keamanan Next.js Middleware: Panduan Implementasi & Proteksi

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 KeamananTujuanMetode Implementasi
AuthenticationVerifikasi identitas userJWT Verification / Session Cookie
AuthorizationKontrol akses per roleRBAC (Role-Based Access Control)
Rate LimitingMencegah brute forceUpstash Redis / Edge Config
Security HeadersProteksi browserNextResponse.headers.set()
Bot DetectionMencegah scrapingUser-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, dan Strict-Transport-Security melalui 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.env dan 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.