XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga
Pahami cara escaping bawaan React mencegah XSS, kapan dangerouslySetInnerHTML berbahaya, dan bagaimana skrip pihak ketiga menimbulkan risiko.
XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Perlindungan XSS Bawaan React
React secara otomatis melakukan escape terhadap semua nilai yang dirender melalui JSX sebelum memasukkannya ke dalam DOM. Saat Anda menulis {userInput} dalam JSX, React memanggil operasi yang setara dengan penetapan textContent — nilai tersebut diperlakukan sebagai teks, bukan HTML. Secara bawaan, hal ini mencegah sebagian besar serangan XSS pada aplikasi React.
Yang Dilakukan dangerouslySetInnerHTML
dangerouslySetInnerHTML={{ __html: htmlString }} adalah jalur keluar React yang melewati escape otomatis. Namanya sengaja terdengar mengkhawatirkan: nama tersebut memperingatkan bahwa Anda bertanggung jawab atas keamanan string HTML. React menetapkan innerHTML secara langsung, sehingga menjalankan HTML apa pun, termasuk skrip dan pengendali peristiwa.
Penggunaan yang Sah
Anda benar-benar memerlukan dangerouslySetInnerHTML saat merender HTML yang berasal dari penyunting teks kaya (seperti TipTap atau Quill), CMS yang menyimpan HTML, atau pengonversi Markdown ke HTML. Sumber-sumber ini menghasilkan markup HTML sungguhan yang harus dirender sebagai HTML, bukan sebagai teks yang di-escape.
Vektor Serangan
Jika string HTML berisi <script>stealCookies()</script> atau <img src=x onerror="stealData()">, menetapkannya sebagai innerHTML akan menjalankan kode penyerang. Konten yang diberikan pengguna dan langsung diteruskan ke dangerouslySetInnerHTML tanpa sanitasi merupakan kerentanan XSS kritis.
DOMPurify: Pembersih Standar
DOMPurify adalah pembersih HTML standar industri untuk peramban. DOMPurify mengurai string HTML dalam konteks terisolasi, menghapus elemen dan atribut berbahaya (tag skrip, pengendali peristiwa, URL javascript:), lalu mengembalikan string HTML yang aman. Penggunaan: DOMPurify.sanitize(dirtyHtml) sebelum meneruskannya ke dangerouslySetInnerHTML.
Risiko Skrip Pihak Ketiga
Skrip pihak ketiga (analitik, widget obrolan, jaringan iklan) berjalan dengan izin yang sama seperti JavaScript aplikasi Anda. Skrip pihak ketiga yang disusupi atau berbahaya dapat membaca document.cookie, mengakses localStorage, membaca masukan formulir, dan mengirim permintaan ke server eksternal — semuanya tanpa tanda apa pun bagi pengguna.
Kebijakan Keamanan Konten sebagai Lapisan Pertahanan
Kebijakan Keamanan Konten adalah header HTTP yang menyatakan skrip mana yang diizinkan untuk dijalankan. Bahkan jika muatan XSS disuntikkan ke dalam DOM, CSP yang dikonfigurasi dengan benar dapat memblokir eksekusinya dengan membatasi skrip sebaris dan hanya mengizinkan sumber skrip yang masuk daftar izin. CSP adalah lapisan pertahanan kedua setelah sanitasi masukan.
Serangan Rantai Pasokan melalui npm
Paket npm merupakan vektor serangan XSS yang nyata. Sebuah dependensi dapat menyertakan kode berbahaya yang mengirimkan variabel lingkungan atau data pengguna ke luar. Insiden node-ipc pada 2022 dan penyusupan ua-parser-js pada 2021 menunjukkan bahwa paket yang digunakan secara luas dapat diambil alih dan disusupi kode berbahaya. Audit dependensi dengan npm audit dan gunakan berkas pengunci.
Yang Dilakukan Penyerang dengan XSS
Serangan XSS yang berhasil memungkinkan penyerang mencuri token JWT pengguna dari sessionStorage (mengirimkannya ke server yang dikendalikan penyerang), melakukan tindakan sebagai pengguna yang telah terautentikasi (panggilan API menggunakan sesi pengguna), mengubah DOM untuk menampilkan konten phishing, atau mencatat setiap penekanan tombol yang dilakukan pengguna dalam aplikasi.
API Trusted Types
API peramban Trusted Types mengharuskan semua titik tujuan DOM (innerHTML, eval, script.src) menerima objek bertipe khusus, bukan string mentah. Hal ini mencegah muatan XSS berbasis string mencapai DOM pada tingkat platform. React sedang mengupayakan kompatibilitas dengan Trusted Types, dan CSP dapat memberlakukannya.
Pola Aman untuk Konten CMS
Pola aman untuk merender HTML dari CMS adalah: ambil HTML, teruskan melalui DOMPurify.sanitize() dengan daftar izin tag dan atribut yang aman, lalu render menggunakan dangerouslySetInnerHTML={{ __html: cleanHtml }}. Jangan pernah melewati langkah sanitasi, meskipun Anda memercayai CMS tersebut, karena basis data CMS itu sendiri dapat disusupi.
Tujuan DOMPurify
Apa yang dilakukan DOMPurify ketika Anda memanggil DOMPurify.sanitize(htmlString)?
Ringkasan Pelajaran
React secara otomatis melakukan escape terhadap nilai JSX, sehingga mencegah sebagian besar XSS. dangerouslySetInnerHTML melewati perlindungan ini untuk perenderan HTML yang sah — selalu sanitasi masukan terlebih dahulu dengan DOMPurify. Skrip pihak ketiga dan paket npm yang disusupi merupakan vektor XSS melalui rantai pasokan. Kebijakan Keamanan Konten menyediakan lapisan pertahanan kedua. XSS yang berhasil memungkinkan pencurian token, penyamaran identitas, dan phishing.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga” gratis?
Ya — teks lengkap “XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga”?
Pahami cara escaping bawaan React mencegah XSS, kapan dangerouslySetInnerHTML berbahaya, dan bagaimana skrip pihak ketiga menimbulkan risiko. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- XSS di React: dangerouslySetInnerHTML dan Skrip Pihak Ketiga
- Perlindungan CSRF dalam React dan Penyiapan API
- Kebijakan Keamanan Konten untuk Aplikasi React
- Pengelolaan Rahasia dan Variabel Lingkungan