React vs. XSS: Korumaların Bittiği Yer
React varsayılan olarak güvenlidir. Çoğu script enjeksiyonunu durdurmak için JSX içindeki değerleri escape eder. Ancak bu, sahte bir güvenlik algısı yaratır. React, XSS riskini azaltır; ancak onu tamamen ortadan kaldırmaz.
Üç ana XSS saldırı türü vardır:
- Reflected XSS: Bir saldırgan kötü amaçlı bir bağlantı gönderir. Sunucu, script'i hemen kullanıcıya geri gönderir. Tarayıcı, script güvenilir bir siteden geliyormuş gibi göründüğü için onu çalıştırır.
- Stored XSS: Saldırgan, sunucunuza bir script kaydeder. Bu script veritabanınızda, yorumlarınızda veya günlüklerinizde (logs) yaşar. Bu içeriği görüntüleyen her kullanıcı script'i çalıştırır.
- DOM Based XSS: Saldırı tamamen tarayıcıda gerçekleşir. Saldırgan, JavaScript'inizin kötü davranmasını sağlamak için URL parametrelerini veya istemci tarafı (client-side) girişlerini değiştirir.
React sizi aslında neyden korur?
- Otomatik Escaping: React, dizeleri (strings) düz metin olarak işler. JSX içine bir script etiketi enjekte etmeye çalışırsanız, React kodu çalıştırmak yerine metni gösterir.
- Güvenli Render Etme: React, içeriğin nasıl görüneceğini yönetir. Bu, tehlikeli tarayıcı API'lerini kullanma ihtiyacınızı azaltır.
- Daha Az DOM Manipülasyonu: Güncellemeleri React yönetir.
document.write()veyainnerHTMLkullanmanıza sık sık gerek kalmaz.
React "escape hatch" (kaçış yolu) mekanizmaları sunar. Eğer bunları yanlış kullanırsanız, güvenlik açıkları oluşturursunuz.
Şu hatalara dikkat edin:
dangerouslySetInnerHTML: Bu özellik, React'e escaping işlemini atlamasını söyler. HTML'i olduğu gibi yerleştirir. Eğer içerik temiz değilse, saldırgan kazanır. İçeriğinizi önce sanitize etmek (temizlemek) için DOMPurify kullanın.- Doğrudan DOM Manipülasyonu: Kullanıcı girişiyle birlikte
element.innerHTMLkullanırsanız, tüm React güvenliğini devre dışı bırakmış olursunuz. - Üçüncü Taraf Kütüphaneler: Bazı harici araçlar aynı güvenlik kurallarına uymayabilir.
React güvenlik için gerekli araçları sağlar. Bunları doğru kullanmalısınız. Güvenlik sizin sorumluluğunuzdadır.
Kaynak: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2