Input tidak berbahaya, konteks yang membuatnya berbeda
Kutipan diatas menyentuh prinsip keamanan cyber, data tidak akan menjadi “jahat” selama diperlakukan dengan tepat pada tempatnya. Analaoginya, satu data string yang sama persis bisa dianggap sebagai teks biasa di satu tempat, tetapi bisa menjadi perintah eksekusi di tempat lain, itulah yang disebutsebagai konteks.
- Contoh konteks teks (Aman)
Anggap saja input pengguna sebagai berikut :
`); alert(`XSS
Kode itu ditempatkan di dalam tag paragraph sebagai beriku :
html
<p>Komentar Anda: `); alert(`XSS</p>
- Hasil: Browser menanggapai ini hanya sebagai teks aneh. Tidak berbahaya.
- Konteks atribut (Bahaya)
Html
<button onclick=”console.log(`user mengklik`); alert (`XSS`)”>klik saya</buttom>
- Hasil: Tanda kutip `) akan bereaksi menutup fungsi console.log, dan alert(`XSS`) dianggap sebagai perintah JavaScript baru yang sah oleh browser. XSS terjadi!.
- KOnteks URL (Bahaya)
Jika input tersebut dimasukan kedalam link :
html
<a href=”javascript: alert(`XSS`)”>Klik Link Ini</a>
Hasil : Meskipun inputnya terlihat seperti teks biasa, tapi karena berada dalam konteks href dengan protocol javascript; maka kemudian ia dieksekusi sebagai kode.
- Analogi : Ada sebuah kata “TEMBAK”. Konteks 1: “TEMBAK” di dalam naskah film action, hanya dialaog tidak ada yang terluka.
- Konteks 2: “TEMBAK”> Diteriakan oleh komandan regu tembak ditujukan kepada prajuritnya. Dan perintah ini adalah eksekusi yang mematikan
Inputnya sama yaiutu “TEMBAK” tapi konteksnya berbeda, konteks menentukan apakah “TEMBAK” itu hanya data atau perintah.
Konteks menentukan apakah input pengguna diperlakukan sebagai data aman atau kode berbahaya, menegaskan bahwa keamanan siber bergantung pada bagaimana data diletakkan dan diproses. Artikel ini menyoroti bahwa validasi input tidak cukup tanpa memastikan data tidak dieksekusi sebagai perintah (konteks), terutama pada atribut HTML dan URL. Untuk pencegahan XSS yang efektif, terapkan encoding (mengubah < menjadi <) dan gunakan library seperti DOMPurify untuk menetralkan input berbahaya.
Kesimpulan: Bukan hanya memvalidasi apakah input mengandung kata “jahat” tetapi harus dipastikan dimanapun INPUT itu diletakan ia harus tetap dianggap sebagai DATA bukan sebagai KODE. Lebih lanjut panduan oencegahan XSS dari OWASP.