Aplikasi yang Anda pakai setiap hari menyimpan datanya di database, tetapi hampir tidak ada yang membiarkan layar di tangan Anda berbicara langsung kepadanya. Di antara keduanya selalu ada satu lapisan perantara, biasanya berbentuk API. Lapisan itu bukan sekadar kebiasaan arsitektur. Ia adalah tempat tiga pagar keamanan dipasang.
Dua hal yang sering dicampur: lapisan dan tingkat
Dokumentasi arsitektur Microsoft membedakan keduanya. Lapisan (layer) bersifat logis, tingkat (tier) bersifat fisik. Aplikasi tiga tingkat yang lazim terdiri dari tingkat presentasi, tingkat tengah yang opsional, dan tingkat database. Pada model lapisan tertutup, sebuah lapisan hanya boleh memanggil lapisan tepat di bawahnya. Artinya layar tidak menyentuh database; ia meminta ke API, dan hanya API yang boleh bertanya ke database.
Microsoft juga jujur soal harganya: tingkat tengah yang hanya meneruskan operasi CRUD menambah latensi dan kerumitan tanpa nilai berarti. Jadi perantara bukan berkah otomatis. Nilainya ada pada tiga pagar berikut.
Pagar pertama: jaringan
Panduan keamanan database OWASP menyatakan koneksi dari klien tebal langsung ke database tidak boleh dibuat sama sekali ("should never"). Database sebaiknya berada di segmen jaringan internal tersendiri, terpisah dari server aplikasi, dan hanya dapat dijangkau oleh sesedikit mungkin mesin. Kalau layar ponsel atau browser memegang alamat dan kata sandi database, setiap salinan aplikasi menjadi pintu masuk.
Pagar kedua: hak akses sekecil mungkin
Akun yang dipakai aplikasi tidak boleh bertipe administrator. Panduan yang sama menyebut kebanyakan aplikasi cukup memegang izin SELECT, UPDATE, dan DELETE, dan akun itu sebaiknya bukan pemilik database. Satu aplikasi satu akun, dan lingkungan pengembangan, UAT, dan produksi memakai database serta akun yang terpisah. Akun bawaan seperti root, sa, atau SYS tidak dipakai.
Kata sandi database juga tidak boleh tertanam di kode sumber. Simpan di berkas konfigurasi di luar direktori web, hanya terbaca oleh pengguna yang berkepentingan, dan tidak ikut masuk ke kontrol versi.
Ingin mendalaminya lebih terstruktur? Taalenta punya kelas Software QA for Mobile App.
Pagar ketiga: query tidak dirakit dari input mentah
Di API, input pengguna tidak ditempel ke teks perintah SQL. OWASP Cheat Sheet mengurutkan pertahanannya: prepared statement (query berparameter) sebagai pilihan pertama, stored procedure yang disusun benar sebagai pilihan kedua, lalu validasi daftar putih untuk bagian yang tidak bisa diberi parameter seperti nama tabel, nama kolom, atau urutan sortir. Escaping input disebut sangat tidak dianjurkan karena rapuh dan berbeda antar-database.
Dua catatan penting. Stored procedure tidak otomatis aman: OWASP Top 10 edisi 2021 mencatat ia tetap bisa rentan bila menyambung query dengan data atau menjalankan data berbahaya lewat EXECUTE IMMEDIATE atau exec(). Validasi juga bukan pengganti: data yang lolos validasi belum tentu aman disambung menjadi teks query.
Skalanya nyata. Pada edisi 2021 itu, kategori injeksi menempati peringkat ketiga, 94 persen aplikasi diuji untuk bentuk injeksi, dengan tingkat kejadian rata-rata 3,37 persen dan 33 CWE terpetakan.
Ringkasan yang bisa Anda pindai
| Pagar | Yang dicek | Rujukan |
|---|---|---|
| Jaringan | Database hanya terjangkau dari server aplikasi | OWASP Database Security |
| Hak akses | Akun tanpa hak admin, satu akun per aplikasi | OWASP Database Security |
| Query | Berparameter, bukan sambungan teks | OWASP SQL Injection Prevention |
| Hak akses | Kata sandi di luar kode dan di luar direktori web | OWASP Database Security |
Cara memakainya
Saat menilai aplikasi sendiri atau buatan AI, tanyakan empat hal: apakah alamat database bisa dijangkau dari luar, akun apa yang dipakai aplikasi dan apa saja izinnya, apakah query dirakit dengan parameter, dan di mana kata sandi database disimpan. Jawaban "belum tahu" pada salah satunya sudah cukup untuk diperiksa lebih dulu.
Kalau lebih enak melihat penjelasannya langsung, ada klip singkat tentang kenapa aplikasi tidak mengakses database secara langsung. Untuk sisi hak akses data di aplikasi buatan AI, lihat juga pembahasan hak akses dan data terbuka.