Apa Itu XSS (Cross-Site Scripting)?
Cross-Site Scripting, atau XSS, adalah cacat keamanan pada situs web yang memungkinkan penyerang menambahkan skrip berbahaya ke halaman web. Sebagian besar waktu, skrip ini ditulis dalam JavaScript.
Jika seseorang mengunjungi halaman yang terpengaruh oleh XSS, browser mereka menjalankan skrip penyerang. Ini dapat mengakibatkan pencurian cookie, pembajakan sesi, atau tindakan yang dilakukan tanpa izin pengguna.
XSS, seperti SQL Injection, secara teratur terdaftar dalam OWASP Top 10 sebagai salah satu kerentanan aplikasi web yang paling umum.
Bagaimana XSS Bekerja?
XSS sering menargetkan aplikasi web yang tidak memeriksa dan membersihkan input pengguna dengan benar.
Sebagai contoh, jika kotak komentar memungkinkan HTML mentah atau JavaScript tanpa penyaringan apa pun, penyerang dapat menambahkan kode seperti ini:
<script>alert('Hacked!');</script>
Ketika korban melihat halaman tersebut, kode berbahaya berjalan di dalam browser mereka.
Mengapa XSS Penting dalam Keamanan Siber
XSS dapat menyebabkan pelanggaran yang lebih besar:
- Pengambilalihan akun (mencuri cookie sesi untuk menyamar sebagai pengguna)
- Pencurian data (menangkap input formulir seperti kata sandi atau kartu kredit)
- Serangan phishing (menyuntikkan formulir login palsu)
- Pengiriman malware (mengalihkan pengguna ke situs web berbahaya)
Jenis XSS
- XSS Berbasis DOM
- Serangan terjadi sepenuhnya di browser dengan memanipulasi Document Object Model (DOM) tanpa melibatkan server.
- XSS Tersimpan
- Skrip berbahaya disimpan secara permanen di server, seperti di basis data, halaman profil.
- XSS Tereflekasi
- Skrip dipantulkan dari server web (misalnya, dalam URL atau pesan kesalahan), skrip akan dieksekusi ketika korban mengklik tautan yang dibuat oleh penyerang.
Cara Mencegah XSS
- Sanitasi input & encoding output: selalu membersihkan data input pengguna sebelum memprosesnya, mengubah input pengguna menjadi format yang aman
- Gunakan Content Security Policy (CSP): membatasi skrip apa yang dapat dieksekusi di browser.
- Hindari eval() dan JavaScript inline: untuk mengurangi risiko injeksi.
- Pengujian keamanan (DAST/IAST): jalankan pengujian keamanan untuk mendeteksi kerentanan lebih awal
Contoh Kasus di Dunia Nyata - Cacing Samy (MySpace, 2005)
Apa yang terjadi: Samy Kamkar mempublikasikan profil MySpace yang mengandung payload stored XSS. Ketika pengguna lain melihat profil tersebut, payload berjalan di browser mereka, (a) menambahkan Samy sebagai teman, (b) menambahkan frasa “Samy adalah pahlawanku” ke profil mereka, dan (c) mereplikasi dirinya ke halaman profil pengguna tersebut.
Dampak: Worm tersebut menyebar sendiri ke ~1 juta pengguna dalam waktu ~20 jam, memaksa MySpace offline sementara.
Mengapa ini berhasil: MySpace mengizinkan HTML/atribut yang tidak di-escape di bidang profil, memungkinkan eksekusi skrip yang tersimpan di browser pengunjung.
Pelajaran / perbaikan: Pengkodean output yang tepat, sanitasi input, penghapusan HTML di bidang profil, dan patching cepat. Samy kemudian menghadapi konsekuensi hukum, dan MySpace menerapkan filter.
Istilah Terkait
- SQL Injection
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)