Materi
Cross-site scripting (XSS) terjadi bila teks dari pengguna disisipkan ke halaman dan peramban membacanya sebagai HTML atau skrip, bukan sebagai teks. Pertahanannya disebut output encoding: setiap karakter yang punya arti khusus di HTML diganti dengan entitasnya tepat sebelum disisipkan. Untuk isi elemen dan nilai atribut bertanda kutip, OWASP mendaftar lima karakter: & menjadi &, < menjadi <, > menjadi >, " menjadi ", dan ' menjadi '. Konteks lain, seperti URL, CSS, dan JavaScript di dalam atribut, butuh encoder lain.
Di Python, html.escape(teks) melakukan kelima penggantian itu; argumen quote=True adalah bawaannya. Di JavaScript, cara paling langsung menampilkan teks adalah element.textContent = teks, yang membuat simpul teks tanpa mengurai HTML. Bila HTML harus dirakit sebagai string, fungsi escape mengganti & lebih dulu: kalau & diganti terakhir, < yang baru dibuat ikut berubah menjadi &lt;.
import html
judul = 'Promo "Akhir Tahun" <b>50%</b> & gratis ongkir'
print(f"<h2>{html.escape(judul)}</h2>")
# <h2>Promo "Akhir Tahun" <b>50%</b> & gratis ongkir</h2>
const judul = document.querySelector("#judul-promo");
judul.textContent = masukanPengguna; // tampil apa adanya, tidak diurai sebagai HTML