Reflected XSS → URL → response
Reflected Cross-Site Scripting (Reflected XSS) adalah salah satu jenis serangan keamanan web yang paling umum, di mana skrip berbahaya disisipkan ke dalam permintaan HTTP (biasanya URL) dan “dipantulkan” (reflected) kembali oleh aplikasi web ke browser korban tanpa sanitasi yang tepat. Berbeda dengan Stored XSS, Reflected XSS tidak disimpan secara permanen di database server, melainkan terjadi secara instan.
Berikut adalah panduan lengkap mengenai Reflected XSS:
- Dasar-dasar XSS (Reflected)
Mekanisme: Penyerang membuat URL khusus yang mengandung skrip berbahaya (biasanya JavaScript) dan mengelabui korban untuk mengklik tautan tersebut.
Sifat: Tidak persisten (transien). Tautan hanya bekerja pada saat diklik dan dampaknya terbatas pada pengguna yang mengklik.
Konteks: Sering ditemukan pada formulir pencarian, formulir kontak, atau parameter URL yang menampilkan kembali input pengguna. - Komponen Utama Reflected XSS
Sebuah serangan Reflected XSS yang berhasil melibatkan tiga komponen utama:
Vulnerable Application (Aplikasi Rentan): Situs web yang menerima input dari URL/parameter dan menampilkannya kembali ke halaman web tanpa membersihkan karakter khusus.
Malicious Script (Skrip Berbahaya): Kode JavaScript (contoh: ) yang disisipkan oleh penyerang.
Victim (Korban): Pengguna yang mengklik tautan berbahaya dan browsernya mengeksekusi skrip tersebut dalam sesi yang terautentikasi. - Contoh Kasus
Bayangkan situs web e-commerce memiliki fungsi pencarian:
https://toko-aman.com
Hasilnya menampilkan: Hasil pencarian untuk: sepatu
Aksi Penyerang:
Penyerang membuat URL:
https://toko-aman.com
Efek:
Saat korban mengklik tautan tersebut, server merespons dengan:
Hasil pencarian untuk:
Browser korban menjalankan skrip dan mengirimkan cookie sesi korban ke server penyerang, menyebabkan session hijacking. - Deteksi dan Analisis
Untuk mendeteksi Reflected XSS, berikut adalah langkah-langkah yang dapat dilakukan:
Manual Testing (Payloads): Masukkan karakter khusus seperti < > ‘ ” / di berbagai input parameter dan periksa apakah karakter tersebut muncul di halaman hasil tanpa pengkodean (raw).
Payload Dasar: Gunakan string seperti atauuntuk melihat apakah skrip dieksekusi.
Analisis HTTP Response: Gunakan tools seperti Burp Suite atau OWASP ZAP untuk melihat respons server secara rinci dan menemukan di mana input direfleksikan.
Browser Developer Tools: Periksa sumber halaman (view-source) untuk melihat bagaimana input ditangani oleh aplikasi. - Mitigasi dan Pencegahan
Pencegahan utama dilakukan di sisi server (server-side) dengan prinsip “jangan pernah percaya input pengguna”:
Output Encoding (Output Sanitization): Enkode data yang disisipkan ke dalam HTML (contoh: mengubah < menjadi <) agar browser menampilkannya sebagai teks, bukan skrip.
Input Validation/Filtering: Validasi input berdasarkan allowlist (karakter apa yang diizinkan), bukan hanya denylist.
HttpOnly Cookie Flag: Atur cookie sesi menjadi HttpOnly. Ini mencegah JavaScript mengakses cookie, sehingga meminimalisir dampak pencurian sesi.
Content Security Policy (CSP): Gunakan header HTTP CSP untuk membatasi sumber dari mana skrip dapat dimuat dan memblokir skrip inline yang berbahaya.
Gunakan Framework Aman: Gunakan framework modern (seperti React, Angular) yang secara otomatis melakukan encoding pada output.