Mindset Keamanan Developer
Menulis kode yang aman dimulai dari cara berpikir. Seorang developer dengan mindset keamanan selalu bertanya: "Bagaimana fitur ini bisa disalahgunakan?" sebelum menulis satu baris kode pun.
Prinsip Least Privilege
Berikan akses seminimal mungkin yang dibutuhkan. Jika sebuah fungsi hanya perlu membaca data, jangan berikan akses tulis.
// Buruk: user biasa punya akses admin
app.get("/admin/users", (req, res) => {
return db.query("SELECT * FROM users");
});
// Baik: cek role terlebih dahulu
app.get("/admin/users", requireRole("admin"), (req, res) => {
return db.query("SELECT * FROM users");
});
Never Trust User Input
Semua input dari pengguna — form, URL parameter, headers, cookies — harus dianggap berbahaya sampai dibuktikan sebaliknya.
- Validasi tipe data (string, number, email, dll.)
- Batasi panjang input
- Sanitize karakter berbahaya
- Gunakan whitelist, bukan blacklist
Fail Securely
Ketika terjadi error, pastikan sistem gagal ke kondisi yang aman, bukan terbuka.
// Buruk: error mengekspos informasi
app.use((err, req, res, next) => {
res.status(500).json({
error: err.message,
stack: err.stack, // Jangan pernah expose stack trace!
query: err.sql // Jangan expose query SQL!
});
});
// Baik: error message generik untuk user
app.use((err, req, res, next) => {
console.error(err); // Log lengkap di server
res.status(500).json({
error: "Terjadi kesalahan. Silakan coba lagi."
});
});
Security by Design
Keamanan bukan sesuatu yang ditambahkan di akhir. Integrasikan keamanan dari awal proses development:
- Threat modeling — Identifikasi ancaman sejak fase desain
- Secure defaults — Konfigurasi default harus aman
- Code review — Review kode dengan fokus keamanan
- Automated testing — Gunakan tools untuk mendeteksi vulnerability
Defense in Depth
Defense in depth adalah strategi keamanan yang menggunakan berlapis-lapis pertahanan sehingga jika satu lapisan berhasil ditembus, lapisan berikutnya masih melindungi sistem. Contoh: validasi input di frontend + backend, WAF di depan server, enkripsi data di database, dan monitoring di setiap layer.
Keep It Simple
Kode yang kompleks lebih sulit diamankan. Semakin sederhana kode, semakin sedikit kemungkinan ada celah keamanan tersembunyi.