Hardening Auth Laravel berarti menutup celah autentikasi dengan audit sesi, pengelolaan secret yang disiplin, dan rate limit berbasis konteks. Artikel ini langsung menjawab bagaimana maka dilakukan secara praktis: validasi input login, mencatat sesi, mengelola secret dan session driver, lalu menutup vektor abuse lewat rate limiter serta monitoring.

Validasi Login dan Audit Session

Input Validation dan Payload Minimal

Validasi mulai dari controller login. Gunakan FormRequest agar aturan validasi tetap konsisten, misalnya:

public function rules()
{
    return [
        'email' => ['required', 'string', 'email'],
        'password' => ['required', 'string', 'min:8'],
    ];
}

Setelah validasi sukses, batasi field yang digunakan untuk autentikasi dengan Auth::attempt pada kombinasi yang jelas sehingga tidak ada input tambahan disimpan.

Merekam Audit Session

Untuk melacak sesi, siapkan middleware audit yang dijalankan setelah login. Middleware ini mencatat kombinasi user_id, alamat IP, user agent, serta waktu mulai sesi ke log atau tabel audit khusus.

public function handle(Request $request, Closure $next)
{
    if (Auth::check()) {
        AuditLogin::updateOrCreate(
            ['user_id' => Auth::id(), 'session_id' => $request->session()->getId()],
            ['ip' => $request->ip(), 'user_agent' => substr($request->userAgent(), 0, 255), 'last_active_at' => now()]
        );
    }

    return $next($request);
}

Catat juga setiap percobaan login gagal dengan alasan dan waktu, sehingga pola brute force bisa terdeteksi melalui query pada tabel audit tersebut.

Rotasi Secret dan Konfigurasi Session

Rotasi Secret dan Penyimpanan Aman

Laravel menggunakan APP_KEY sebagai secret utama. Perkuat dengan prosedur rotasi berkala: buat key baru, isi ke .env secara aman, lalu deploy bersamaan untuk menghindari downtime. Pastikan key hanya bisa diakses proses aplikasi (bukan repositori publik) dan gunakan tool seperti Vault atau Secrets Manager untuk environment produksi.

Pemilihan Session Driver dan Invalidasi

Pilih driver database atau redis bila membutuhkan kontrol sesi lebih baik ketimbang file. Contoh konfigurasi session.php:

'driver' => env('SESSION_DRIVER', 'redis'),
'lifetime' => env('SESSION_LIFETIME', 30),
'expire_on_close' => false,
'secure' => env('SESSION_SECURE_COOKIE', true),
'http_only' => true,
'same_site' => 'lax',

Setelah logout atau reset password, invalidasi sesi secara aktif:

public function logout(Request $request)
{
    $request->session()->invalidate();
    $request->session()->regenerateToken();

    return redirect('/login');
}

Regenerasi token mencegah reuse session lama. Untuk invalidasi terpusat, pertimbangkan tabel user_sessions dengan kuk dan periksa setiap request menggunakan middleware apakah sesi masih valid.

Mekanisme Rate Limit dan Deteksi Abuse

Rate Limit Kontekstual untuk Auth dan Upload

Gunakan RateLimiter::for untuk membedakan aturan endpoint autentikasi dan upload.

RateLimiter::for('login', function (Request $request) {
    $key = $request->ip() . '|' . $request->email;
    return Limit::perMinute(5)->by($key);
});

RateLimiter::for('upload', function (Request $request) {
    return Limit::perMinute(20)->by($request->ip());
});

Jangan hanya mengandalkan IP: kombinasi IP, user agent, dan email membuat aturan lebih granular. Terapkan middleware throttle:login dan throttle:upload di route masing-masing.

Deteksi Anomali dan Respon

Sediakan monitoring untuk mendeteksi penyimpangan seperti banyaknya kegagalan login dalam satu menit yang melebihi threshold. Cara sederhana: log ke database, lalu jalankan query rutin atau dashboard di Grafana untuk melihat tren. Atau kirimkan alert ke Sentry/Datadog bila rata-rata gagal melebihi 80% dari total request.

Bila tercatat anomali, lakukan respons otomatis: blokir IP sementara, kirim notifikasi email ke security team, atau tampilkan pesan “Too many attempts” untuk menghindari leaking informasi spesifik.

Penutup

Dengan validasi login ketat, audit session kontinu, pengelolaan secret dan sesi yang disiplin, serta rate limit berlapis disertai monitoring, Anda memperkuat autentikasi Laravel dari berbagai sisi. Terapkan pendekatan ini secara konsisten dan selalu catat setiap anomali agar respon keamanan bisa cepat dan tepat.