Bayangkan task-tracker-api yang kamu bangun di seri sebelumnya sudah dipakai ratusan orang. Suatu hari, seseorang menemukan bahwa dengan sedikit modifikasi request, mereka bisa melihat, mengubah, bahkan menghapus task milik orang lain — bukan cuma task mereka sendiri. Tidak ada yang "meretas" dengan cara canggih; mereka cuma mengganti angka ID di URL, dan API-nya dengan patuh menampilkan data siapa pun yang diminta.
Ini bukan skenario ekstrem. Ini persis apa yang terjadi kalau API dibangun cuma memikirkan "apakah fitur ini jalan?", tanpa pernah bertanya "apa yang terjadi kalau ada yang memakainya dengan niat jahat?". Artikel ini membahas kenapa pertanyaan kedua itu sama pentingnya dengan yang pertama — dan kenapa keamanan bukan fitur tambahan yang bisa "ditempel belakangan".
Dampak Nyata dari Mengabaikan Keamanan
Sebelum masuk ke teknis, penting memahami dulu apa taruhannya. Beberapa konsekuensi konkret dari API yang tidak aman:
Poin pentingnya: keamanan bukan soal "apakah kita akan diserang", tapi "kapan", dan "seberapa siap kita saat itu terjadi". Bahkan aplikasi sekecil task-tracker-api bisa jadi sasaran — bukan karena pentingnya data di dalamnya, tapi karena server yang bisa "dikuasai" itu sendiri bernilai bagi penyerang (untuk botnet, relay serangan lain, dsb).
Mindset Defense in Depth
Prinsip paling penting dalam keamanan adalah defense in depth (pertahanan berlapis): jangan bergantung pada SATU lapisan proteksi saja. Kalau satu lapisan gagal atau ditembus, lapisan berikutnya masih menahan.
Untuk API, lapisan-lapisan itu biasanya:
Request masuk
→ Rate limiting (cegah penyalahgunaan volume)
→ Autentikasi (siapa kamu?)
→ Otorisasi (apa yang boleh kamu akses?)
→ Validasi input (apakah data yang dikirim masuk akal?)
→ Business logic (proses sesuai aturan aplikasi)
→ Query database (parameterized, bukan string concatenation)
Kalau salah satu lapisan gagal — misalnya validasi input kurang ketat — lapisan otorisasi yang benar tetap mencegah user mengakses data yang bukan haknya. Ini beda jauh dengan pendekatan "tambal satu lubang, anggap selesai", yang meninggalkan sistem rapuh begitu ada celah baru ditemukan di tempat lain.
Threat Modeling Sederhana: Berpikir Seperti Penyerang
Sebelum menulis kode pertahanan, berguna untuk sejenak berpikir seperti penyerang. Pertanyaan sederhana yang bisa ditanyakan untuk API mana pun:
Latihan sederhana ini — meluangkan waktu bertanya "bagaimana ini bisa disalahgunakan?" sebelum menganggap fitur "selesai" — adalah kebiasaan yang akan kita praktikkan berulang sepanjang seri ini, bukan cuma teori satu kali baca.