
Bayangin Ada yang Mengetuk Pintu Login 50.000 Kali...
Bayangin ada orang asing menulis sebuah script otomatis yang menembak endpoint POST /api/auth/login milik Budi 50.000 kali dalam satu menit, masing-masing dengan kombinasi password yang berbeda-beda untuk akun admin@tokobudi.com. Ini disebut serangan Brute Force.
Server Budi, karena tidak punya rem sama sekali, dengan taat memproses seluruh 50.000 percobaan itu satu per satu. Selain berpotensi salah satu kombinasi akhirnya tembus, CPU server juga langsung tersedot habis hanya untuk melayani satu orang jahat ini — pengguna lain yang sah jadi ikut kena imbas loading lama.
Masalahnya: API Tidak Membatasi Berapa Kali Boleh Dicoba
Secara default, sebuah endpoint API akan selalu bersedia memproses request sebanyak apapun yang datang, tanpa peduli apakah itu datang dari 1000 pengguna berbeda atau dari 1 orang yang mengirim 1000 kali secara beruntun.
Nah, Di Sinilah 'Rate Limiting' Masuk!
Rate Limiting adalah "polisi tidur" yang membatasi berapa kali satu sumber (biasanya berdasarkan alamat IP) boleh mengirim request dalam periode waktu tertentu.
import rateLimit from "express-rate-limit";
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 menit
max: 5, // maksimal 5 percobaan
message: "Terlalu banyak percobaan login, coba lagi nanti.",
});
app.post("/api/auth/login", loginLimiter, loginController);- Setiap kali sebuah IP mengirim request ke
/login, Server menambah hitungan di memori (biasanya disimpan di Redis agar cepat dan bisa dibagi ke banyak instance server). - Begitu satu IP sudah mencoba lebih dari 5 kali dalam 15 menit, Server otomatis membalas
429 Too Many Requeststanpa perlu repot mengecek password-nya sama sekali — hacker mentok di gerbang, akun pengguna lain tetap aman diproses normal.
Intinya: Rate Limiting wajib dipasang minimal di endpoint sensitif seperti /login, /register, dan /forgot-password. Ini pertahanan murah-meriah tapi sangat efektif meredam serangan brute force maupun spam kecil-kecilan sebelum sempat menyusahkan server.
Mau langsung pakai template?
Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.
Browse Templates