Lewati ke konten utama
menjadi.dev
Chapter 26.1 Security Menengah

OWASP Top 10: Ancaman Paling Umum di Web

Kenali dan mitigasi 10 ancaman security paling umum di aplikasi web

Tujuan Pembelajaran

  • Memahami OWASP Top 10
  • Bisa mengidentifikasi vulnerability di kode
  • Mengerti mitigasi untuk masing-masing ancaman

Analogi

Diagram

      OWASP Top 10:
├── A01: Broken Access Control
├── A02: Cryptographic Failures
├── A03: Injection (SQL, NoSQL, Command)
├── A04: Insecure Design
├── A05: Security Misconfiguration
├── A06: Vulnerable Components
├── A07: Auth Failures
├── A08: Data Integrity Failures
├── A09: Logging Failures
└── A10: SSRF
    

OWASP Top 10 adalah daftar ancaman security paling kritis untuk aplikasi web — wajib diketahui setiap developer

Penjelasan Konsep

OWASP (Open Web Application Security Project) adalah organisasi non-profit yang fokus pada keamanan aplikasi web. OWASP Top 10 adalah daftar 10 ancaman security paling kritis yang diupdate setiap 2-3 tahun berdasarkan data dari jutaan aplikasi.

A01: Broken Access Control

User bisa mengakses resource yang seharusnya tidak bisa diakses. Contoh: mengubah ID di URL untuk melihat data user lain. Mitigasi: enforce access control di server, deny by default, CORS proper configuration.

A02: Cryptographic Failures

Data sensitif tidak dienkripsi dengan benar.

Contoh: menyimpan password plain text, menggunakan HTTP untuk form login. Mitigasi: encrypt data at rest and in transit, gunakan HTTPS, jangan hardcode secrets.

A03: Injection

Data tidak tertrusted dikirim ke interpreter sebagai query/command. Contoh: SQL injection, NoSQL injection, Command injection. Mitigasi: parameterized queries, input validation, ORM.

A05: Security Misconfiguration

Konfigurasi security yang kurang, tidak tepat, atau tidak di-maintain.

Contoh: default credentials, unnecessary features enabled, error message yang menampilkan stack trace. Mitigasi: hardening, minimal platform, automated patching.

A06: Vulnerable Components

Dependency (library/framework) yang punya vulnerability diketahui. Mitigasi: regular dependency audit (npm audit, Snyk), automated updates.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami OWASP Top 10., bisa mengidentifikasi vulnerability di kode., dan mengerti mitigasi untuk masing-masing ancaman. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca OWASP Top 10, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

OWASP Top 10 adalah daftar ancaman security paling kritis untuk aplikasi web — wajib diketahui setiap developer. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa typescript. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Parameterized queries memisahkan data dari command — input diperlakukan sebagai data, bukan executable code. Access control harus di-verify di server, jangan percaya client.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

typescript
// Mitigasi SQL Injection: parameterized queries
// ❌ VULNERABLE
const query = `SELECT * FROM users WHERE email = '${email}'`;
// Input: email = "' OR '1'='1" → returns all users!

// ✅ SAFE dengan parameterized query
const result = await db
  .select().from(users)
  .where(eq(users.email, email)); // Drizzle ORM automatically parameterizes

// Mitigasi Broken Access Control
app.get('/api/orders/:id', async (c) => {
  const orderId = c.req.param('id');
  const userId = c.get('userId'); // From JWT token
  
  const order = await db.select().from(orders)
    .where(and(eq(orders.id, orderId), eq(orders.userId, userId)))
    .limit(1);
  
  if (!order.length) return c.json({ error: 'Not found' }, 404);
  return c.json(order[0]);
});

Penjelasan Kode

Parameterized queries memisahkan data dari command — input diperlakukan sebagai data, bukan executable code. Access control harus di-verify di server, jangan percaya client.

Prompt AI

Lakukan security audit di aplikasimu: cek input validation, access control, dan dependency vulnerabilities.

Pertanyaan Reflektif

Security bukan feature — itu adalah process. OWASP Top 10 harus di-review secara berkala karena ancaman terus berkembang.