flawopen.com/xss/Kotlin

● CWE-79 · Tinggi
Riset Keamanan · FlawOpen

Cross-Site Scripting in Kotlin

Learn how to fix Cross-Site Scripting (XSS) (CWE-79) in Kotlin. Side-by-side vulnerable vs secure code examples for Ktor HTML DSL and Thymeleaf template escaping.

💡 Penjelasan Sederhana (ELI5)

Bayangkan menempelkan catatan pada papan pengumuman umum yang bertuliskan: 'Siapa pun yang membaca ini, serahkan dompet Anda kepada orang di sebelah Anda'. Jika setiap pengunjung secara buta mematuhi catatan tersebut, pelaku dapat mencuri uang semua orang.

Konsep Kunci & Istilah

Web Application Security
Komponen arsitektur utama yang terpengaruh oleh CWE-79.
CWE-79
Klasifikasi standar Common Weakness Enumeration (CWE) untuk xss-kotlin.
Defense-in-Depth
Verifikasi rekayasa berlapis dan isolasi batas waktu proses (runtime).

Alur Serangan Langkah demi Langkah

Step 1

Penyuntikan Payload Skrip Berbahaya

Penyerang menyisipkan tag HTML atau kode JavaScript (misal: <script> atau <img onerror=...>) ke dalam formulir atau URL.

Step 2

Penyajian DOM Tanpa Pelolosan (Escape)

Aplikasi menampilkan input langsung ke halaman HTML tanpa pengkodean entitas HTML sesuai konteks.

Step 3

Parsing & Eksekusi DOM di Peramban Korban

Saat korban mengunjungi halaman, browser menafsirkan karakter yang disuntikkan sebagai kode yang dapat dieksekusi.

Step 4

Pembajakan Sesi & Pencurian Token Akses

Skrip berjalan dalam konteks kredensial korban, mencuri cookie autentikasi dan token penyimpanan lokal.

Kode Sumber: Rentan vs Aman

✕ IMPLEMENTASI RENTAN
// untrusted HTML loaded with JS + native bridge
webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(
  NativeBridge(), "Android"
)
webView.loadData(untrustedHtml,
  "text/html", "UTF-8")
✓ PERBAIKAN AMAN & KUAT
// sanitize first; avoid exposing a bridge
val safeHtml = sanitize(untrustedHtml)
webView.settings.javaScriptEnabled = false
webView.loadData(safeHtml,
  "text/html", "UTF-8")

Daftar Periksa Penguatan Sistem Rekayasa

References