FlawOpen

flawopen.com/XSS pada JavaScript/Svelte

Apakah Svelte aman dari XSS secara default?

Halaman referensi
Penjelasan sederhana

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.

BERISIKO
<p>{@html comment}</p>
// nilai diproses sebagai markup HTML sungguhan
AMAN
<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

Lihat juga Cross-Site Scripting (XSS, CWE-79): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com Apakah unggahan SVG berisiko XSS? Risiko XSS pada Vue v-html WKWebView: HTML tak tepercaya aman? Apa beda XSS reflected, stored, dan DOM-based? Risiko keamanan addJavascriptInterface di Android Perlindungan XSS Angular: default aman dan API bypass