Go Fiber bisa sangat efisien sebagai backend API publik, tapi tanpa kontrol autentikasi dan rate limit yang tepat, permukaan serangan cepat meningkat. Dalam artikel ini langsung dibahas bagaimana memperkuat auth, session, dan perlindungan API menggunakan secure cookie, rotasi secret, validasi input, rate limit per route, serta strategi pengawasan anomali.

1. Dasar Autentikasi dan Secure Cookie

Untuk API publik, autentikasi harus menghindari ekspos token di header yang tidak terenkripsi. Gunakan cookie yang HTTP-only dan SameSite untuk mencegah akses skrip klien dan resubmission lintas situs. Dalam Go Fiber, konfigurasi secure cookie bisa ditangani melalui middleware session.

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/session"
)

store := session.New(session.Config{
    CookieHTTPOnly: true,
    CookieSecure:   true,
    CookieSameSite: "Strict",
    Expiration:     30 * time.Minute,
})

app := fiber.New()
app.Use(func(c *fiber.Ctx) error {
    sess, err := store.Get(c)
    if err != nil {
        return fiber.ErrInternalServerError
    }
    // validasi session dan lanjutkan
    c.Locals("session", sess)
    return c.Next()
})

Konfigurasi di atas menjaga session ID tetap terenkripsi dan tidak dapat diakses JavaScript. Pastikan cookie hanya dibuat setelah autentikasi berhasil dan dihapus saat logout.

2. Rotation Secret dan Validasi Input

Token atau cookie yang ditandatangani harus rutin dirotasi supaya pencurian kunci lama tidak berdampak jangka panjang. Gunakan struktur kunci berganda dan lakukan pengecekan validasi dengan middleware:

  • Gunakan key versioning untuk menjaga backward compatibility saat rotasi.
  • Simpan secret pada vault (misalnya HashiCorp Vault atau AWS Secrets Manager) dan muat ulang di aplikasi tanpa restart.
  • Validasi input menggunakan struct binding dan ctx.BodyParser plus validator custom sebelum logika bisnis.
type LoginRequest struct {
    Username string `json:"username" validate:"required,alphanum"
    Password string `json:"password" validate:"required,min=8"
}

app.Post("/login", func(c *fiber.Ctx) error {
    var req LoginRequest
    if err := c.BodyParser(&req); err != nil {
        return fiber.ErrBadRequest
    }
    if err := validator.Validate(req); err != nil {
        return fiber.ErrUnprocessableEntity
    }
    // lanjutkan autentikasi
})

Jangan lupa sanitasi data sebelum masuk ke database atau log.

3. Rate Limit Per Route dan Handling Abuse

Rate limit standar tidak cukup untuk API publik; bahas per-route untuk resource sensitif seperti login, update profil, atau endpoint yang berat.

import "github.com/gofiber/fiber/v2/middleware/limiter"

app.Use("/login", limiter.New(limiter.Config{
    Max:        5,
    Expiration: 1 * time.Minute,
    KeyGenerator: func(c *fiber.Ctx) string {
        return c.IP()
    },
    LimitReached: func(c *fiber.Ctx) error {
        return c.Status(fiber.StatusTooManyRequests).JSON(fiber.Map{"error": "rate limit exceeded"})
    },
}))

Gunakan IP + API key sebagai key generator saat tersedia. Untuk abuse handling, simpan event rate limit pada metric/ logging agar bisa di-respon dengan block IP sementara atau challenge tambahan (CAPTCHA, MFA).

4. Memantau dan Merespons Anomali

Pantau audit log, rate limit hits, dan pengecualian autentikasi melalui sistem observability. Beberapa langkah praktis:

  • Integrasikan logging ke sistem seperti Loki/ELK dan kirim alert jika >X percobaan login gagal per menit.
  • Gunakan Prometheus untuk menghitung rate limit hits dan response latencies.
  • Sisipkan middleware custom untuk mendeteksi pola tak wajar (misalnya header modifikasi, token reuse) dan kirim ke incident queue.

Contoh middleware pendeteksi anomali:

app.Use(func(c *fiber.Ctx) error {
    if len(c.Get("Authorization")) > 512 {
        log.Warn("authorization header terlalu panjang")
    }
    return c.Next()
})

Respons bisa berupa block sementara dengan c.Status(429) yang juga dicatat dalam sistem monitoring.

5. Checklist Audit Keamanan API Go Fiber

  1. Apakah semua cookie session HttpOnly, Secure, dan SameSite sesuai kebijakan?
  2. Apakah secret rotasi dijadwalkan + key versioning dipakai?
  3. Apakah input route tervalidasi dengan validator + sanitasi?
  4. Apakah rate limit diterapkan per route berdasar sensitivitas?
  5. Apakah metric rate limit, login gagal, dan error penting dipantau?
  6. Apakah ada respon cepat saat anomali terdeteksi (block IP, alert)?

Checklist ini bisa dijadikan bagian dari review keamanan rutin untuk memastikan tidak ada celah konfigurasi.

Penutup

Dengan mengkombinasikan cookie aman, rotasi kunci, validasi input, rate limit granular, dan pemantauan intensif, API publik berbasis Go Fiber bisa jauh lebih tahan terhadap penyalahgunaan. Terapkan langkah-langkah ini secara bertahap dan gunakan checklist sebagai titik kontrol untuk deployment.