Rate Limiting & Throttling — Security

Kenapa Rate Limiting Penting? Rate limiting membatasi jumlah request yang bisa dikirim client dalam periode waktu tertentu. Tanpa rate limiting, API rentan terh

Kenapa Rate Limiting Penting?

Rate limiting membatasi jumlah request yang bisa dikirim client dalam periode waktu tertentu. Tanpa rate limiting, API rentan terhadap brute force, DDoS, dan penyalahgunaan resource.

Ancaman Tanpa Rate Limiting

Implementasi Rate Limiting

1. Laravel Rate Limiting

// routes/api.php — Laravel throttle middleware
Route::middleware("throttle:60,1")->group(function () {
    Route::get("/api/data", [DataController::class, "index"]);
});
// 60 requests per 1 menit

// Custom rate limiter di AppServiceProvider
RateLimiter::for("login", function (Request $request) {
    return Limit::perMinute(5)->by($request->ip());
});

// Gunakan di route
Route::post("/login", [AuthController::class, "login"])
    ->middleware("throttle:login");

2. Express.js Rate Limiting

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 menit
    max: 100,                  // 100 requests per window
    message: { error: "Terlalu banyak request, coba lagi nanti" },
    standardHeaders: true,     // Return rate limit info di headers
    legacyHeaders: false
});

app.use("/api/", limiter);

// Rate limit lebih ketat untuk login
const loginLimiter = rateLimit({
    windowMs: 15 * 60 * 1000,
    max: 5, // Hanya 5 percobaan login per 15 menit
});
app.post("/api/login", loginLimiter, loginHandler);

Response Headers

// Rate limit headers (standar IETF)
RateLimit-Limit: 100         // Batas maksimal
RateLimit-Remaining: 95      // Sisa request
RateLimit-Reset: 1700000000  // Waktu reset (Unix timestamp)

// Ketika limit tercapai
HTTP/1.1 429 Too Many Requests
Retry-After: 900  // Coba lagi dalam 900 detik

Strategi Rate Limiting

Best Practices

Yang akan kamu pelajari