Kenapa Keamanan Web Penting — Security

Pernah dengar Tokopedia kebocoran 91 juta data user 2020? Atau Bukalapak 13 juta? Atau Cermati 2.9 juta? Yang terbaru: BPJS Kesehatan 279 juta data Indonesia…

Keamanan web itu soal menjaga kode yang kamu tulis supaya gak gampang disalahgunakan orang lain. Bayangin rumah: kamu gak cuma kepengen pintunya bisa ditutup, kamu kepengen ada kunci, gorden, lampu, dan tetangga yang ngeliat. Satu pengaman gampang ditembus, banyak pengaman bikin maling capek duluan. Kode yang kamu tulis adalah pintu itu, dan tiap endpoint adalah satu jalan masuk.

🧪 Tebakan cepat: sebuah endpoint GET /admin cuma menjalankan res.send(adminPanel), tanpa cek apa pun. Siapa yang bisa membukanya? Tebak dulu, jawabannya ada di bagian "Developer adalah pintu pertama".

Kenapa ini penting buat kamu

Tiap hari ada bot yang nyisir internet nyari celah, dan mereka gak peduli aplikasimu besar atau kecil. Kalau ada lubang, mereka nemu. Dampaknya nyata: data user bocor, perusahaan kena denda dan kehilangan kepercayaan, dan kamu yang nulis kodenya ikut repot. Security bukan fitur tambahan yang dikerjain belakangan, tapi cara kita nulis tiap baris.

Satu istilah yang bakal sering muncul: vulnerability, atau dalam bahasa Indonesia kerentanan. Vulnerability adalah celah atau kelemahan di software yang bisa dimanfaatkan penyerang buat masuk tanpa izin atau merusak sistem. Jadi kalau kamu dengar "aplikasi ini punya vulnerability", artinya ada pintu yang gak terkunci.

CIA Triad: tiga hal yang kita jaga

Keamanan informasi dibangun di atas tiga pilar, disingkat CIA. Ini bukan nama badan intelijen, tapi tiga kata.

Huruf C berdiri untuk Confidentiality. Itu pilar pertamanya.

Developer adalah pintu pertama

Keamanan dimulai dari kode. Lihat endpoint admin yang tadi, versi rentannya seperti ini:

// RENTAN: siapa pun yang tahu URL-nya bisa buka panel admin
app.get('/admin', (req, res) => {
  res.send(adminPanel)
})

Versi yang diperbaiki memasang pengecekan dulu:

// AMAN: cek login dulu, lalu cek apakah dia admin
app.get('/admin', requireLogin, requireAdmin, (req, res) => {
  res.send(adminPanel)
})

Defense in depth: jangan andalkan satu lapis

Di Lab, ada sebuah request GET /admin dari seorang tamu, dan kamu bisa menyalakan lapisan satu per satu: requireLogin, requireAdmin, rateLimit, auditLog. Dengan semua lapisan mati, tamu langsung sampai ke data admin. Nyalakan requireLogin, tamu berhenti di pintu pertama. Inilah defense in depth: pasang beberapa lapisan, jadi kalau satu lapis jebol, lapis berikutnya masih menahan.

Gak ada sistem yang seratus persen aman. Tujuannya bukan "gak bisa dijebol", tapi bikin penyerang harus kerja jauh lebih mahal daripada nilai yang dia incar.

⚠️ Jebakan yang sering ketemu

TL;DR: Keamanan web wajib di tiap baris kode, karena bot nyari celah tiap hari dan dampak kebocoran itu nyata. Vulnerability berarti celah yang bisa dimanfaatkan penyerang. CIA Triad adalah tiga hal yang dijaga: Confidentiality (kerahasiaan), Integrity (integritas), Availability (ketersediaan). Endpoint seperti GET /admin tanpa pengecekan berarti tidak ada autentikasi, jadi siapa pun bisa masuk, maka pasang requireLogin lalu requireAdmin. Defense in depth berarti banyak lapisan, biar satu jebol pun masih ada yang menahan.

Yang akan kamu pelajari