Kembali ke Roadmap
// PHASE 1 · How Web Apps Work

How Web Apps Work

Arsitektur Web Application

Memahami cara kerja web app dari ujung ke ujung membuatmu lebih efektif menemukan di mana celah bisa terjadi.

Frontend vs Backend

LayerTeknologiBug yang Sering Ditemukan
FrontendHTML, CSS, JavaScriptXSS, DOM injection, client-side bypass
BackendPHP, Node.js, Python, JavaSQLi, SSRF, RCE, auth bypass
DatabaseMySQL, PostgreSQL, MongoDBSQLi, NoSQLi, data exposure
ServerNginx, ApacheMisconfig, path traversal

REST API

Modern web app hampir semua menggunakan API untuk komunikasi frontend-backend. API adalah target utama bug hunter karena sering kurang diproteksi.

# Contoh REST API endpoints GET /api/users # List semua user GET /api/users/123 # Detail user 123 → IDOR? POST /api/users # Buat user baru PUT /api/users/123 # Update user 123 → IDOR? DELETE /api/users/123 # Hapus user 123 → IDOR?

Authentication Flow

Alur autentikasi yang umum:

  1. User kirim username + password via POST
  2. Server validasi credential ke database
  3. Server buat session/JWT dan kirim ke client
  4. Client simpan token di cookie/localStorage
  5. Setiap request berikutnya kirim token di header/cookie

JWT (JSON Web Token)

# Struktur JWT: header.payload.signature eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.abc123 # Decode di jwt.io — payload berisi: {"user": "rizky", "role": "user", "exp": 1234567890}
JWT Attack: Coba ubah algoritma dari HS256 ke "none" — beberapa implementasi menerima token tanpa signature! Atau ganti role dari "user" ke "admin" jika secret key lemah.

Database & Query

Backend berkomunikasi dengan database menggunakan query. Inilah kenapa SQL Injection bisa terjadi:

// Input user langsung ke query = BERBAHAYA $q = "SELECT * FROM users WHERE id = " . $_GET['id']; // Gunakan prepared statement = AMAN $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_GET['id']]);

Cookies vs localStorage vs sessionStorage

StorageAkses JSDikirim ke ServerAman untuk Token?
Cookie (HttpOnly)TidakOtomatisYa ✓
Cookie (biasa)YaOtomatisRentan XSS
localStorageYaTidakRentan XSS
sessionStorageYaTidakRentan XSS
// CEK PEMAHAMAN
Mengapa menyimpan JWT di localStorage lebih berisiko dibanding cookie HttpOnly?
AlocalStorage lebih kecil kapasitasnya
BlocalStorage lebih lambat
ClocalStorage bisa diakses JavaScript, rentan dicuri via XSS
DlocalStorage dikirim otomatis ke semua domain
Linux Command Line Subdomain Enumeration