XSS Koruması: Kullanıcı Verisini Güvenli Şekilde Sayfaya Basmak
XSS neden tehlikelidir?
XSS, saldırganın kullanıcının tarayıcısında JavaScript çalıştırmasını sağlayabilir. Bu durum oturum çalma, sahte form gösterme, kullanıcı adına işlem yaptırma veya sayfa içeriğini değiştirme gibi riskler doğurur.
Reflected ve stored XSS farkı
Reflected XSS genellikle URL veya form parametresinin anında sayfaya basılmasıyla oluşur. Stored XSS ise zararlı içeriğin veritabanına kaydedilip diğer kullanıcılara gösterilmesiyle daha kalıcı hale gelir.
Output encoding
HTML içinde gösterilecek kullanıcı verisi htmlspecialchars ile encode edilmelidir. Böylece gibi değerler kod olarak değil metin olarak görünür. Farklı bağlamlar için farklı encode kuralları gerekebilir: HTML, attribute, JavaScript ve URL bağlamları aynı değildir.
CSP desteği
Content Security Policy, hangi kaynaklardan script ve stil yükleneceğini sınırlandırarak XSS etkisini azaltabilir. Ancak CSP güvenli kodlamanın alternatifi değildir; ikinci savunma katmanı olarak düşünülmelidir.
Kontrol listesi
- Kullanıcı verisini doğrudan HTML’e basma.
- Blog, yorum, profil ve mesaj alanlarında çıktı encode et.
- Admin panelinde HTML izin verilecekse whitelist yaklaşımı kullan.
- CSP başlıklarını planla.
- Security Lab dışında gerçek XSS çalıştıracak alan bırakma.