𝗥𝗲𝗮𝗰𝘁 𝘃𝘀. 𝗫𝗦𝗦: 𝗗𝗶 𝗠𝗮𝗻𝗮 𝗕𝗮𝘁𝗮𝘀𝗮𝗻 𝗞𝗲𝗮𝗺𝗮𝗻𝗮𝗻 𝗕𝗲𝗿𝗮𝗸𝗵𝗶𝗿
React aman secara default. Ia melakukan escaping pada nilai di JSX untuk menghentikan sebagian besar injeksi skrip. Namun, hal ini menciptakan rasa aman yang semu. React mengurangi risiko XSS, tetapi tidak menghilangkannya sepenuhnya.
Ada tiga jenis utama serangan XSS:
- Reflected XSS: Penyerang mengirimkan tautan berbahaya. Server segera mengirimkan kembali skrip tersebut ke pengguna. Browser menjalankan skrip tersebut karena terlihat seolah-olah berasal dari situs tepercaya.
- Stored XSS: Penyerang menyimpan skrip di server Anda. Skrip tersebut tersimpan di database, komentar, atau log Anda. Setiap pengguna yang melihat konten tersebut akan menjalankan skripnya.
- DOM Based XSS: Serangan terjadi sepenuhnya di dalam browser. Penyerang mengubah parameter URL atau input sisi klien untuk membuat JavaScript Anda berperilaku buruk.
Apa yang sebenarnya dilindungi oleh React?
- Automatic Escaping: React memperlakukan string sebagai teks biasa. Jika Anda mencoba menyuntikkan tag skrip ke dalam JSX, React akan menampilkan teksnya alih-alih menjalankan kodenya.
- Safe Rendering: React mengelola bagaimana konten ditampilkan. Hal ini mengurangi kebutuhan Anda untuk menggunakan API browser yang berbahaya.
- Lebih Sedikit Manipulasi DOM: React menangani pembaruan. Anda tidak perlu sesering sebelumnya menggunakan
document.write()atauinnerHTML.
React menyediakan "escape hatches". Jika Anda menggunakannya dengan salah, Anda menciptakan kerentanan.
Waspadai kesalahan-kesalahan berikut:
dangerouslySetInnerHTML: Properti ini memerintahkan React untuk melewati proses escaping. Ia memasukkan HTML persis seperti aslinya. Jika kontennya tidak bersih, penyerang akan menang. Gunakan DOMPurify untuk menyanitasi konten Anda terlebih dahulu.- Manipulasi DOM Langsung: Jika Anda menggunakan
element.innerHTMLdengan input pengguna, Anda melewati semua sistem keamanan React. - Library Pihak Ketiga: Beberapa alat eksternal mungkin tidak mengikuti aturan keamanan yang sama.
React menyediakan alat-alat untuk keamanan. Anda harus menggunakannya dengan benar. Keamanan adalah tanggung jawab Anda.
Sumber: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2