DOM-Based XSS=JS Logic Error
3. Jenis-jenis XSS (Secara Mekanisme, Bukan Definisi)
Modul pembelajaran mengenai Cross-Site Scripting (DOM XSS) umumnya mencakup pemahaman mendalam tentang bagaimana skrip berbahaya dieksekusi di sisi klien (browser) tanpa melibatkan server dalam proses eksekusinya.
Berikut adalah sub-topik utama dalam modul DOM Based XSS:
1. Dasar-Dasar DOM Based XSS
- Definisi DOM XSS: Penjelasan bahwa serangan ini terjadi pada sisi klien (client-side), di mana manipulasi Document Object Model (DOM) menyebabkan eksekusi skrip berbahaya.
- Perbedaan dengan XSS Klasik: Berbeda dengan Reflected atau Stored XSS, pada DOM XSS, payload (skrip) tidak pernah dikirim ke server, melainkan diproses sepenuhnya di browser korban.
- Konsep DOM (Document Object Model): Memahami bagaimana JavaScript mengakses dan memanipulasi elemen HTML (misalnya:
document.location.search,innerHTML). Acunetix +3
2. Komponen Utama DOM XSS
- Source (Sumber): Tempat input pengguna berbahaya berasal. Contoh: URL,
window.location.search,window.location.hash, atau referrer. - Sink (Tujuan): Fungsi atau elemen DOM yang menerima data dari source dan mengeksekusinya. Contoh:
eval(),setTimeout(),innerHTML,document.write(). - Alur Data: Bagaimana data mengalir dari source ke sink tanpa pembersihan (sanitization) yang tepat. ouTube +1
3. Contoh Kasus dan Eksploitasi
- Manipulasi URL: Menggunakan fragment URL (
#) atau query string (?) untuk memasukkan payload JavaScript. - Objek
window.location: Contoh kerentanan saat aplikasi menggunakanlocation.hashuntuk mengubah konten halaman secara dinamis. - DOM XSS pada 404 Pages: Memanfaatkan halaman kesalahan yang mencerminkan input URL. YouTube +1
4. Deteksi dan Analisis
- Analisis Kode Sisi Klien: Memeriksa JavaScript dalam browser (melalui Developer Tools) untuk mencari fungsi sink yang berbahaya.
- Alat Bantu (Tools): Menggunakan DOM Invader dari Burp Suite, OWASP ZAP, atau scanner otomatis lainnya untuk mengidentifikasi source dan sink. Acunetix +3
5. Pencegahan dan Mitigasi
- Output Encoding: Melakukan encode data di sisi klien sebelum menempatkannya ke dalam DOM.
- Validasi Input: Memastikan data yang diterima dari source (URL, dll) sesuai format yang diharapkan.
- Menggunakan API yang Aman: Menghindari penggunaan sink berbahaya (seperti
innerHTML) dan beralih ke alternatif yang lebih aman (sepertitextContentatauinnerText). - Content Security Policy (CSP): Menerapkan kebijakan CSP yang ketat untuk membatasi eksekusi skrip. Anak Teknik Indonesia +4
Sub-topik ini sering diajarkan dalam konteks keamanan aplikasi web (AppSec) dan bug bounty hunting.