Semua artikel

OWASP Top 10: Risiko Keamanan Aplikasi Web dan Cara Mencegahnya

Sepuluh kategori risiko di OWASP Top 10 edisi 2025, contohnya di aplikasi bisnis sehari-hari, cara mencegahnya di proyek Laravel, Django, atau Node.js, dan cara memasukkan pengecekan keamanan ke proses development.

Keamanan|Dipublikasikan |10 menit baca
Pola papan sirkuit yang menyala dengan cahaya hijau kebiruan

OWASP Top 10 adalah daftar risiko keamanan paling penting di aplikasi web, disusun dari data celah keamanan nyata dan survei praktisi keamanan. Klien, auditor, dan penetration tester sering memakainya sebagai checklist, sehingga tim development sering ditanya apakah aplikasinya sudah "sesuai OWASP". Daftar ini lebih berguna sebagai peta tempat aplikasi biasanya bermasalah. Panduan ini membahas edisi 2025 beserta contoh bagaimana setiap risiko muncul di aplikasi bisnis yang kami bangun dan kami review.

Daftar Edisi 2025 Secara Ringkas

KategoriContoh kejadiannyaPencegahan utama
A01 Broken Access ControlMengganti ID di URL langsung menampilkan invoice pelanggan lain, atau user biasa bisa memanggil endpoint adminCek kepemilikan dan role di server untuk setiap request, tolak kalau tidak ada izin
A02 Security MisconfigurationMode debug menyala di production, password default, bucket storage terbuka, atau port database bisa diakses dari internetKonfigurasi aman yang disimpan di kode dan direview, dengan pengaturan terpisah per environment
A03 Software Supply Chain FailuresLibrary usang yang punya celah keamanan, atau package yang sudah disusupi ikut masuk ke buildLock file, scan dependency, dan jadwal update rutin
A04 Cryptographic FailuresPassword disimpan dengan MD5, data sensitif dikirim lewat HTTP, atau key enkripsi ter-commit ke GitHashing password bawaan framework, HTTPS di semua tempat, key disimpan di secrets manager
A05 InjectionQuery SQL disusun dengan menggabungkan string dari input user, atau teks user ditampilkan sebagai HTMLParameterized query dan ORM, escaping output oleh template engine
A06 Insecure DesignVoucher yang bisa dipakai berkali-kali, atau OTP tanpa batas percobaanThreat modelling untuk alur bisnis dan batasan yang dirancang sejak awal
A07 Authentication FailuresLogin tanpa batas percobaan, reset password yang lemah, atau session yang tidak pernah kedaluwarsaRate limit, autentikasi multi-faktor untuk admin, pengelolaan session yang aman
A08 Software or Data Integrity FailuresMenerima webhook pembayaran tanpa mengecek signature, atau deploy build yang tidak ditandatanganiVerifikasi signature, amankan pipeline CI/CD, hindari deserialization yang tidak aman
A09 Security Logging and Alerting FailuresPembobolan baru ketahuan berbulan-bulan kemudian karena login gagal dan error hak akses tidak pernah dicatatCatat event keamanan di satu tempat dan pasang alert untuk pola yang tidak biasa
A10 Mishandling of Exceptional ConditionsError yang membocorkan stack trace, atau kegagalan yang membuat transaksi setengah jadi dan user tetap punya aksesTolak akses saat terjadi error, pakai transaksi database, tampilkan pesan error yang umum

Dibandingkan edisi 2021, server-side request forgery (SSRF) sekarang masuk ke broken access control, risiko supply chain punya kategori sendiri, dan penanganan error jadi kategori baru di A10. Kategori pertama sudah bertahun-tahun ada di posisi teratas, dan justru kategori ini yang paling sulit ditemukan oleh scanner otomatis.

Broken Access Control Paling Butuh Perhatian

Framework sudah melindungi dari injection dan cross-site scripting secara default, asalkan dipakai sesuai caranya. Hak akses lain cerita, karena hanya kode Anda yang tahu bahwa invoice 1042 milik perusahaan A dan bahwa kepala cabang hanya boleh menyetujui refund sampai nominal tertentu. Setiap endpoint yang membaca atau mengubah data butuh pengecekan di server. Menyembunyikan tombol di tampilan tidak termasuk pengecekan. Di Laravel caranya dengan Policy, di Django dengan object-level permission di Django REST Framework, dan di Node.js dengan lapisan otorisasi bersama yang dilewati semua route.

  • Ambil data lewat user atau tenant yang sedang login, misalnya $request->user()->orders()->findOrFail($id), sehingga ID milik tenant lain otomatis menghasilkan 404.
  • Tulis test otomatis yang login sebagai user A lalu meminta data user B di setiap endpoint penting.
  • Cek juga fitur download file dan export. Fitur ini sering ditambahkan belakangan dan terlewat dari pengecekan yang biasa.
  • Blokir request dari server ke alamat internal dan endpoint metadata cloud kalau aplikasi mengambil URL yang dimasukkan user.

Konfigurasi dan Dependency

Salah konfigurasi dan komponen usang jadi penyebab banyak insiden yang kami temui di server yang sebenarnya tidak diserang dengan cara canggih. Simpan pengaturan production di kode atau di template yang direview, matikan output debug, hapus akun default, dan jadikan bucket storage private sebagai default. Jalankan composer audit, npm audit, atau pip-audit di CI, aktifkan Dependabot atau Renovate, dan sediakan jadwal rutin untuk update supaya tidak menumpuk sampai upgrade versi mayor terasa menakutkan.

Celah Desain yang Tidak Bisa Ditemukan Scanner

Insecure design berkaitan dengan aturan bisnis. Contohnya promo yang bisa dipakai dua kali dengan mengirim dua request di waktu yang sama, transfer yang tidak mengecek saldo di dalam transaksi database yang sama, atau OTP yang bisa ditebak karena tidak ada batas percobaan. Masalah seperti ini butuh sesi threat modelling singkat saat fitur dirancang. Tanyakan bagaimana user yang tidak jujur akan menyalahgunakan alur ini, lalu tambahkan batasan, lock, dan pengecekan sebelum kodenya ditulis.

Memasukkan Keamanan ke Proses Development

  1. 1Tambahkan checklist keamanan singkat berdasarkan Top 10 ke template pull request dan definition of done.
  2. 2Jalankan static analysis seperti SonarQube atau Semgrep dan scan dependency di setiap pull request.
  3. 3Tulis test hak akses untuk setiap endpoint yang menyentuh data pelanggan atau data keuangan.
  4. 4Scan aplikasi yang sedang berjalan dengan scanner dinamis seperti OWASP ZAP atau Qualys sebelum rilis besar.
  5. 5Catat login, kegagalan hak akses, dan aksi admin di satu tempat, lalu pasang alert untuk lonjakan yang tidak biasa.
  6. 6Lakukan penetration test oleh pihak luar minimal setahun sekali, atau sebelum meluncurkan sistem yang menangani pembayaran atau data pribadi.

Untuk aplikasi yang memproses data pribadi pengguna di Indonesia, praktik-praktik ini juga membantu memenuhi kewajiban keamanan di UU Pelindungan Data Pribadi (UU PDP). Catatan hasil scan, perbaikan, dan testing jadi bukti yang berguna ketika klien atau auditor bertanya bagaimana aplikasi Anda dilindungi.

Poin penting

  • Pakai OWASP Top 10 sebagai peta tempat aplikasi biasanya bermasalah.
  • Curahkan usaha terbesar untuk hak akses, dan uji dengan user dan ID yang nyata.
  • Simpan konfigurasi di kode yang direview dan update dependency secara terjadwal.
  • Cari celah penyalahgunaan aturan bisnis saat tahap desain, karena scanner tidak bisa menemukannya.
  • Otomatiskan scan statis, dependency, dan dinamis, lalu catat event keamanan di satu tempat.

Artikel terkait

Artikel lain tentang software development, AI, cloud, dan infrastruktur.

Layar utama smartphone yang penuh ikon aplikasi
Pengembangan Mobile|

Cara Upload Aplikasi ke Play Store dan App Store

Yang perlu disiapkan sebelum aplikasi mobile masuk ke toko aplikasi: akun developer pribadi atau perusahaan, signing key, listing dan formulir privasi, aturan closed testing untuk akun Play baru, TestFlight, alasan umum ditolak App Store, dan rilis bertahap.

Laptop yang menampilkan dashboard bisnis di samping cangkir kopi
Pengembangan Software|

Aplikasi Custom atau Software Jadi (SaaS): Mana yang Cocok?

Kapan software jadi berbasis langganan lebih menguntungkan, kapan aplikasi custom balik modal, cara membandingkan biaya untuk beberapa tahun, jalur gabungan SaaS dan integrasi custom, serta pertanyaan yang perlu dijawab sebelum memutuskan.

Sedang mencari partner untuk pengembangan software?

Ceritakan proyek yang sedang Anda bangun, kebutuhan yang ingin diselesaikan, dan tantangan yang dihadapi. Kami dapat membantu membahas pendekatan teknis, scope, timeline, dan estimasi biaya.

Mulai diskusi