Hardening Auth API dimulai dengan memastikan bahwa payload yang masuk valid, sesi tidak disalahgunakan, dan lubang tersebut tidak bisa dipaksa dengan request berlebih atau bocornya secret. Artikel ini langsung membahas rangkaian tindakan konkret untuk validasi, pembatasan laju, serta rotasi secret sehingga API tetap andal dan dapat diaudit.
1. Validasi Payload dan Session
Langkah pertama adalah mengangkat validasi dari level bisnis menjadi perimeter keamanan.
- Validasi schema: Gunakan library seperti ajv atau yup untuk memverifikasi tipe data, field wajib, dan batasan panjang. Jika menggunakan JSON Web Token (JWT), pastikan struktur payload minimal sesuai kebutuhan otentikasi (misalnya hanya
subdanexp). - Validasi session: Sertakan pengecekan tambahan seperti token revocation list atau audit session ID di cache. Hindari mempercayai header
X-Sessiontanpa verifikasi terhadap database sesi.
Contoh middleware Express yang memvalidasi schema dan memeriksa session cache:
const Ajv = require('ajv');
const ajv = new Ajv({ allErrors: true });
const schema = {
type: 'object',
properties: {
username: { type: 'string', minLength: 3 },
password: { type: 'string', minLength: 8 }
},
required: ['username', 'password'],
additionalProperties: false
};
app.post('/auth/login', (req, res, next) => {
const validate = ajv.compile(schema);
if (!validate(req.body)) {
return res.status(400).json({ errors: validate.errors });
}
// cek session/blacklist di cache
if (isSessionRevoked(req.headers['x-session-id'])) {
return res.status(401).json({ error: 'Session revoked' });
}
next();
});
Validasi payload mencegah injection dan error parsing, sedangkan validasi session memastikan sesi yang sudah dicabut tidak dapat digunakan kembali.
2. Rate Limit Per Endpoint
Rate limiting harus diberlakukan tidak hanya global tetapi per endpoint supaya fungsi otentikasi sensitif tidak disalahgunakan. Pendekatan yang umum:
- Bucket token berbasis user/IP: Gunakan Redis untuk menyimpan counter setiap IP atau user ID per endpoint.
- Beda limit untuk sensitive action: Misalnya, login mengizinkan 5 percobaan per menit per IP, sementara refresh token bisa lebih sering karena trusted flow.
Contoh konfigurasi rate limit yang bisa disimpan sebagai object:
const rateLimits = {
'/auth/login': { window: 60, max: 5 },
'/auth/refresh': { window: 60, max: 20 }
};
Middleware bisa mengakomodasi konfigurasi ini dengan memanggil Redis INCR dan mengatur TTL sesuai window. Jangan lupa menangani Retry-After untuk memberi tahu konsumen kapan mencoba lagi.
Trade-off: Rate limit agresif dapat mengganggu pengguna sah pada jaringan shared; siapkan paket bypass berbasis token whitelist jika diperlukan.
3. Rotasi Secret dan Penyimpanan Aman
API otentikasi bergantung pada secret (misalnya private key, HMAC). Kesalahan umum: secret disimpan dalam repo atau environment variabel tanpa batasan. Praktik aman:
- Penyimpanan terpusat: Gunakan Secret Manager (HashiCorp Vault, AWS Secrets Manager) dengan kebijakan akses baca yang ketat.
- Rotasi: Jalankan rotasi berkala (misalnya setiap 90 hari) atau segera setelah dugaan kebocoran. Terapkan strategi double-secret: token lama tetap valid selama periode transisi.
Contoh proses rotasi:
- Generate secret baru dan simpan sebagai versi "pending".
- Deploy update konfigurasi agar layanan membaca versi terbaru dan menyimpan versi lama untuk validasi inbound yang masih memakai secret lawas.
- Setelah periode grace, hapus versi lama dari penyimpanan.
Rotasi otomatis dapat dijadwalkan lewat pipeline CI/CD. Selalu gabungkan logging dan alerting — misalnya, jika secret diubah tanpa deployment, auditing bisa mendeteksi perbedaan.
4. Checklist Audit Otentikasi
Gunakan checklist berikut saat meninjau keamanan Auth API:
- Validasi schema request dan response (tidak mengembalikan field sensitif seperti
password). - Pembatasan laju per endpoint berdasarkan sensitivity.
- Penanganan error yang konsisten tanpa membocorkan alasan (misal: "email atau password salah").
- Penyimpanan secret dalam vault dengan enkripsi at-rest dan audit access.
- Rotasi secret dengan log perubahan dan grace period.
- Peninjauan dan penghapusan session yang tidak aktif atau dicurigai.
Dokumentasikan checkpoint ini dalam pipeline audit security berkala, sertakan bukti log dan hasil tes agar mudah ditindaklanjuti.
Kesimpulan
Memperkuat Auth API melalui validasi payload/session, rate limit per endpoint, dan rotasi secret tidak hanya mencegah serangan yang umum terjadi, tetapi juga mempermudah audit dan respon insiden. Terapkan langkah-langkah tersebut secara berkesinambungan agar otentikasi tetap kokoh di tengah ancaman yang berkembang.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!