flawopen.com/XSS pada JavaScript/Svelte
Apakah Svelte aman dari XSS secara default?
Bayangkan `{comment}` seperti mencetak catatan: tanda kurung sudut tetap terlihat sebagai teks. `{@html comment}` seperti meminta penata huruf membaca tanda pada halaman sebagai instruksi tata letak. Jika tanda itu berasal dari sumber yang tidak tepercaya, browser dapat memprosesnya sebagai HTML dan memicu XSS.
<p>{@html comment}</p>
// nilai diproses sebagai markup HTML sungguhan
<p>{comment}</p>
// di-escape secara otomatis
Aturannya
Svelte mengompilasi keluaran {expression} biasa sebagai teks yang sudah di-escape, sehingga nilainya tidak diproses sebagai markup HTML. Sebaliknya, {@html} sengaja merender string HTML. Dokumentasi Svelte memperingatkan bahwa untuk mencegah XSS, nilainya harus di-escape atau dikendalikan. Perlakukan direktif ini sebagai titik penyisipan HTML yang sensitif terhadap keamanan dan gunakan sanitizer yang terawat untuk rich text dari pengguna.
Cara memeriksa codebase
Cari `{@html}` di berkas `.svelte`. Untuk setiap temuan, telusuri asal nilai dan semua transformasinya. Anggap masukan pengguna, data eksternal, dan konten pengguna yang tersimpan sebagai tidak tepercaya. Jika konten harus berupa teks, gunakan `{expression}`. Jika HTML kaya diperlukan, sanitasi dengan sanitizer HTML yang terawat dan uji bahwa markup yang tidak diizinkan dihapus.
grep -rn "{@html" --include="*.svelte" .HTML kaya: pertahankan batas sanitasi
Gunakan `{expression}` jika konten harus ditampilkan sebagai teks. Jika pengguna perlu menulis HTML, sanitasi konten akhir dengan sanitizer HTML yang terawat, seperti DOMPurify, sebelum meneruskannya ke `{@html}`. Jangan menggabungkan atau mengubah hasil yang sudah disanitasi; tindakan itu dapat membatalkan perlindungannya. Perbarui sanitizer secara rutin dan izinkan hanya elemen serta atribut markup yang dibutuhkan produk. Sanitasi HTML tidak membuat nilai yang sama aman dalam konteks JavaScript, CSS, atau URL.
Referensi
- Dokumentasi Svelte — {@html ...}
- flawopen.com — XSS pada JavaScript
- DOMPurify — project documentation
- OWASP — Cross Site Scripting Prevention