ngodingdulu
SecurityKonsepPemula

OWASP Top 10 untuk Pemula: 10 Celah Paling Umum

Daftar sepuluh risiko keamanan yang dipakai developer di seluruh dunia sebagai titik awal. Kamu tidak harus jadi ahli keamanan untuk memahaminya.

Oleh Afa Hernandes6 menit baca

Daftar isi

Kebanyakan aplikasi dibobol bukan lewat teknik yang canggih, tetapi lewat kesalahan yang sama yang terus berulang: halaman admin yang lupa dikunci, password yang disimpan apa adanya, input pengguna yang langsung masuk ke query database. Karena kesalahannya berulang, kesalahan itu bisa dipelajari dan dicegah.

OWASP Top 10 adalah daftar sepuluh risiko keamanan aplikasi web yang paling umum dan paling berdampak. Daftar ini disusun oleh OWASP (Open Worldwide Application Security Project), komunitas keamanan nirlaba, dan dipakai developer serta perusahaan di seluruh dunia sebagai titik awal. Artikel ini menjelaskan edisi terbaru, OWASP Top 10:2025, dalam bahasa sederhana. Kamu akan mendapat contoh nyata dan langkah pencegahan dasar untuk setiap risiko.

Kenapa developer pemula perlu tahu

Keamanan sering dianggap urusan “nanti, kalau aplikasinya sudah besar”. Masalahnya, celah keamanan paling mudah dicegah saat kode ditulis, bukan setelah dibobol. Apalagi kalau kamu membangun dengan bantuan AI: AI cenderung menulis kode yang jalan, belum tentu yang aman, kecuali kamu memintanya dan memeriksanya.

Kamu tidak perlu menghafal daftar ini. Cukup kenali polanya, supaya saat menulis atau meninjau kode kamu tahu apa yang perlu dicurigai.

OWASP Top 10:2025 dalam satu tabel

OWASP mengumumkan edisi 2025 pada November 2025, menggantikan edisi 2021. Urutannya didasarkan pada data temuan nyata dan survei komunitas.

# Risiko Artinya dalam satu kalimat
A01 Broken Access Control Pengguna bisa melihat atau mengubah hal yang bukan haknya
A02 Security Misconfiguration Pengaturan bawaan atau salah setel yang membuka celah
A03 Software Supply Chain Failures Celah datang dari library, tool, atau proses build yang kamu pakai
A04 Cryptographic Failures Data sensitif tidak dienkripsi, atau dienkripsi dengan cara yang lemah
A05 Injection Input pengguna ikut dieksekusi sebagai perintah (SQL, HTML, shell)
A06 Insecure Design Celahnya ada di rancangan, bukan sekadar salah ketik kode
A07 Authentication Failures Proses login dan session mudah ditembus
A08 Software or Data Integrity Failures Kode atau data diterima tanpa memastikan keasliannya
A09 Security Logging and Alerting Failures Serangan terjadi, tapi tidak ada yang mencatat atau menyadarinya
A10 Mishandling of Exceptional Conditions Error dan kondisi tak terduga ditangani dengan cara yang membuka celah

Dua kategori baru di edisi ini: A03 (perluasan dari “komponen usang” di edisi 2021 menjadi seluruh rantai pasok software) dan A10. Security Misconfiguration juga naik ke posisi kedua.

Penjelasan setiap risiko

A01: Broken Access Control

Contoh paling klasik: alamat /pesanan/1024 menampilkan pesananmu. Kamu ganti angkanya menjadi /pesanan/1025, dan muncul pesanan orang lain. Aplikasinya memeriksa apakah kamu sudah login, tapi lupa memeriksa apakah pesanan itu milikmu.

Cegah: setiap kali mengambil atau mengubah data, periksa di server bahwa data itu memang milik pengguna yang sedang login. Tolak akses secara bawaan, lalu izinkan secara eksplisit. Menyembunyikan tombol di tampilan bukan pengamanan, karena permintaan bisa dikirim langsung tanpa tombol.

A02: Security Misconfiguration

Password bawaan admin yang tidak diganti, mode debug yang menyala di server production sehingga pesan error memperlihatkan isi kode, folder yang bisa dijelajahi, atau penyimpanan cloud yang terbuka untuk umum.

Cegah: matikan fitur yang tidak dipakai, ganti semua password bawaan, pastikan mode debug mati di production, dan pasang security headers. Pengaturan untuk laptop dan server sebaiknya dipisahkan, misalnya lewat environment variable.

A03: Software Supply Chain Failures

Aplikasi modern dibangun dari ratusan library orang lain. Kalau salah satunya punya celah, atau sengaja disusupi kode jahat, aplikasimu ikut terdampak. Contohnya: library usang dengan celah yang sudah diketahui, atau paket palsu dengan nama yang mirip paket populer.

Cegah: pakai library seperlunya, perbarui secara rutin, periksa celah yang diketahui dengan npm audit atau tool sejenis, dan cek dulu sebuah paket sebelum memasangnya, apalagi kalau paket itu disarankan AI. Pastikan juga lock file (package-lock.json atau sejenisnya) ikut di-commit.

A04: Cryptographic Failures

Password disimpan apa adanya di database, data dikirim lewat HTTP biasa, atau enkripsi memakai algoritma yang sudah dianggap lemah.

Cegah: selalu pakai HTTPS (lihat Domain, DNS, dan HTTPS), simpan password dengan algoritma hashing khusus password, dan jangan membuat algoritma enkripsi sendiri. Cara menyimpan password dibahas lengkap di menyimpan password dengan benar.

A05: Injection

Input pengguna ikut dijalankan sebagai perintah. Bentuk yang paling terkenal adalah SQL injection, di mana input seperti ' OR '1'='1 mengubah arti sebuah query. Saudaranya adalah XSS, di mana input berisi HTML atau JavaScript ikut dijalankan di browser pengguna lain.

Cegah: jangan pernah menempelkan input ke dalam perintah. Pakai prepared statement atau placeholder untuk query, dan tampilkan teks pengguna sebagai teks, bukan HTML. Contoh lengkapnya ada di SQL injection dan XSS dan CSRF.

A06: Insecure Design

Celah yang lahir dari rancangan. Contohnya: fitur “lupa password” yang hanya menanyakan nama ibu kandung (mudah ditebak), atau kode voucher yang bisa dicoba tanpa batas sampai ketemu.

Cegah: sebelum membangun fitur, tanyakan “bagaimana fitur ini bisa disalahgunakan?”. Batasi percobaan berulang (rate limiting), dan pakai pola yang sudah terbukti untuk fitur sensitif seperti login dan pembayaran.

A07: Authentication Failures

Login yang bisa ditebak terus-menerus tanpa batas, password lemah yang diizinkan, session yang tetap aktif setelah logout, atau ID session yang muncul di URL.

Cegah: batasi percobaan login, dukung autentikasi dua langkah, pakai library atau layanan autentikasi yang matang alih-alih membuat sendiri dari nol, dan pastikan session benar-benar berakhir saat logout.

A08: Software or Data Integrity Failures

Aplikasi menerima kode atau data tanpa memastikan keasliannya. Contohnya: memuat script dari server pihak ketiga yang kemudian disusupi, pembaruan otomatis tanpa tanda tangan digital, atau data dari pengguna yang langsung diubah kembali menjadi objek tanpa diperiksa.

Cegah: muat script hanya dari sumber tepercaya, lindungi alur build dan deploy (termasuk siapa yang boleh mengubahnya), dan jangan memercayai data yang datang dari luar sebelum divalidasi.

A09: Security Logging and Alerting Failures

Serangan sering tidak langsung terlihat. Tanpa catatan (log) dan peringatan, kamu baru tahu ada pembobolan setelah datanya tersebar, berbulan-bulan kemudian.

Cegah: catat kejadian penting seperti login gagal, perubahan hak akses, dan error di server, lalu pasang peringatan untuk pola yang mencurigakan. Satu hal penting: jangan mencatat password atau secret ke dalam log.

A10: Mishandling of Exceptional Conditions

Kategori baru di edisi 2025. Isinya tentang apa yang terjadi saat sesuatu tidak berjalan semestinya. Contohnya: pesan error yang memperlihatkan detail database ke pengguna, atau pemeriksaan izin yang gagal karena error lalu malah mengizinkan akses (fail open).

Cegah: tangani error secara eksplisit. Saat ragu, tolak (fail closed). Tampilkan pesan error umum ke pengguna, dan simpan detailnya hanya di log server.

Mulai dari mana

Sepuluh risiko sekaligus memang terasa banyak. Untuk aplikasi pertamamu, dahulukan lima kebiasaan ini, karena kelimanya menutup sebagian besar celah yang paling sering terjadi:

  1. Periksa kepemilikan data di server setiap kali mengambil atau mengubah data (A01).
  2. Pakai placeholder untuk query dan tampilkan input pengguna sebagai teks (A05).
  3. Hash password dengan algoritma khusus password (A04, A07).
  4. Simpan secret di environment variable, bukan di kode (A02, A04).
  5. Perbarui library secara rutin dan jangan sembarang memasang paket (A03).

Kalau aplikasimu dibangun dengan bantuan AI, pakai juga checklist keamanan aplikasi buatan AI sebelum aplikasinya dipakai orang lain.

Pertanyaan yang sering diajukan

Apakah OWASP Top 10 cukup untuk membuat aplikasi aman?

Tidak sepenuhnya. Daftar ini adalah titik awal untuk kesadaran, bukan standar lengkap. Untuk pemeriksaan yang lebih menyeluruh, OWASP punya dokumen lain seperti ASVS (Application Security Verification Standard). Tapi kalau kesepuluh risiko ini sudah kamu pahami dan cegah, aplikasimu sudah jauh lebih aman daripada kebanyakan aplikasi.

Apakah risiko ini hanya untuk aplikasi web?

Fokus daftar ini memang aplikasi web, tapi polanya berlaku hampir di mana saja, termasuk aplikasi mobile yang terhubung ke server dan API yang dipakai aplikasi lain.

Seberapa sering daftarnya diperbarui?

Beberapa tahun sekali. Edisi sebelumnya terbit tahun 2017 dan 2021. Polanya cenderung stabil, karena kesalahan yang sama terus berulang. Yang berubah biasanya urutan dan cakupan kategorinya.

Kesimpulan

OWASP Top 10 adalah peta sepuluh celah yang paling sering dibobol, dari akses tanpa izin sampai error yang tidak tertangani. Kamu tidak perlu menghafalnya. Kenali polanya, dahulukan lima kebiasaan dasar di atas, dan periksa kodemu, terutama kode buatan AI, dengan peta ini di kepala.

Langkah berikutnya di jalur Security membahas risiko yang paling sering ditemui pemula satu per satu, dengan kode yang bisa kamu coba: menyimpan password dengan benar, SQL injection, dan XSS serta CSRF.

Bagikan:WhatsAppTelegramXFacebook
Ilustrasi kotak komentar berisi kode img onerror yang ditampilkan sebagai teks dengan textContent, dan form dari situs penyerang yang gagal mengirim cookie bertanda SameSite=Lax
SecurityTutorial

XSS dan CSRF dengan Contoh Nyata

Dua serangan yang memanfaatkan browser penggunamu sendiri. Kami mencobanya di Chrome sungguhan, supaya kamu tahu persis mana yang aman dan mana yang tidak.

23 Maret 20266 mnt

Ilustrasi input email berisi tanda kutip OR 1=1 yang membuat query rentan membocorkan semua pengguna termasuk admin, dibandingkan query aman dengan placeholder yang mengembalikan nol baris
SecurityTutorial

SQL Injection: Cara Kerja dan Pencegahannya

Cukup satu tanda kutip di kolom login untuk membuka seluruh isi tabel. Lihat sendiri cara kerjanya, lalu tutup celahnya dengan satu kebiasaan sederhana.

9 Maret 20266 mnt

Ilustrasi password kopi-susu-123 dan salt acak masuk ke mesin hashing scrypt atau argon2id, menghasilkan hash yang disimpan di database dan tidak bisa dibalik
SecurityTutorial

Menyimpan Password dengan Benar: Hashing

Kalau database-mu bocor, password pengguna tidak boleh ikut terbaca. Begini cara menyimpannya supaya tetap aman, bahkan dalam skenario terburuk.

23 Februari 20266 mnt

Ilustrasi dua pengguna Budi dan Sari melewati halaman login menuju database yang barisnya ditandai pemiliknya, dengan kartu aturan akses yang hanya mengizinkan membaca baris milik sendiri
AITutorial

Menambahkan Database dan Login Tanpa Panik

Begitu datamu pindah dari browser ke database online, satu pertanyaan jadi yang terpenting: bisakah orang lain membaca data yang bukan miliknya?

1 Juni 20266 mnt

Enter bukaEsc tutupHalaman pencarian