Satu baris script kecil bisa menghancurkan kredibilitas sebuah website. Itu bukan hiperbola itulah realita dari serangan Cross-Site Scripting (XSS). Masalah ini sering dianggap sepele, tapi justru itulah yang membuatnya berbahaya.
Ketika seorang pengguna mengakses halaman yang terlihat normal, tapi ternyata ada script jahat yang berjalan diam-diam di latar belakang, maka data pribadi mereka bisa dicuri. Informasi login, cookies sesi, bahkan kendali akun bisa diambil alih. Maka dari itu, XSS filtering bukan hanya penting, tapi krusial.
Apa Itu Serangan XSS?
Cross-Site Scripting (XSS) adalah jenis serangan di mana penyerang menyuntikkan kode JavaScript berbahaya ke dalam halaman web yang kemudian dijalankan di browser pengguna lain. Biasanya dilakukan melalui:
- Kolom komentar
- Form input
- URL yang mengandung payload
- Forum atau area input dinamis
Contoh payload sederhana:
htmlCopyEdit<script>alert('XSS!')</script>
Kalau script ini bisa ditampilkan dan dijalankan di halaman web, maka sistem Anda rentan terhadap XSS.
Ada tiga tipe utama XSS:
- Stored XSS: Script disimpan di database dan muncul setiap halaman dimuat.
- Reflected XSS: Script hanya muncul sekali, biasanya lewat URL.
- DOM-based XSS: Manipulasi terjadi di sisi browser karena pengolahan DOM yang tidak aman.
Bahaya Nyata dari XSS
- Pencurian data pengguna (termasuk session dan cookies)
- Pengalihan ke situs phishing
- Manipulasi tampilan web
- Pengambilan kendali akun admin
- Penyebaran malware ke pengunjung
Yang paling parah, XSS bisa dipakai untuk serangan lebih lanjut seperti mencuri token otentikasi atau mengeksploitasi akun pengguna penting.
Strategi Mencegah dan Menyaring XSS
Validasi dan Filter Input
Segala input dari pengguna—komentar, nama, form login, query search—harus divalidasi. Jangan biarkan karakter berbahaya seperti <
, >
, "
masuk ke sistem tanpa difilter.
Gunakan whitelist validation, bukan blacklist. Artinya, tentukan karakter yang boleh, bukan hanya yang dilarang.
Contoh:
javascriptCopyEditconst sanitized = input.replace(/[^a-zA-Z0-9 ]/g, "");
Escape Output ke HTML
Saat menampilkan data pengguna di halaman, pastikan sudah di-escape ke format HTML aman.
Contoh konversi:
<
menjadi<
>
menjadi>
"
menjadi"
Framework modern seperti React atau Laravel Blade sudah menerapkan ini secara default. Tapi bila Anda menulis raw HTML, pastikan escape dilakukan secara eksplisit.
Gunakan Content Security Policy (CSP)
Seperti dibahas sebelumnya, CSP dapat mencegah eksekusi script tidak sah, termasuk dari serangan XSS. Ini adalah lapisan keamanan ekstra yang sangat efektif bila digabungkan dengan input filtering.
Hindari Eval dan InnerHTML
Fungsi seperti eval()
, document.write()
, atau innerHTML
sangat rawan jika digunakan dengan input yang belum difilter. Hindari sebisa mungkin, atau pastikan hanya digunakan dengan data statis.
Terapkan Library Sanitasi
Gunakan library open-source yang dirancang khusus untuk menyaring input berbahaya, seperti:
- DOMPurify (JavaScript)
- HTMLPurifier (PHP)
- Sanitize-html (Node.js)
Library ini menyediakan sanitasi menyeluruh sesuai standar keamanan terbaru.
Kesimpulan
XSS bukan sekadar gangguan kecil ia adalah ancaman nyata yang bisa membuat pengguna kehilangan kepercayaan dan membuat reputasi bisnis runtuh. Maka dari itu, filtering XSS harus jadi standar dalam setiap pengembangan aplikasi web.
Dan kalau Anda ingin membangun web yang bukan hanya cepat dan fungsional, tapi juga kuat dari sisi keamanan, Webklik adalah mitra teknologi yang siap membantu Anda menghindari jebakan XSS sejak baris pertama kode ditulis.