Merhaba MVC Severler,
İpuçları serisinin 3.sü ile devam edeceğiz. Kullanıcı inputlarının gösterildiği yerin View olmasından dolayı bir çok durumda bu inputlar olası Cross-Site Script Injection atakları söz konusu olabilir ve olacaktırda. Bu konu ile ilgili bu yazımda giriş seviyesinde bilgi vereceğim.
Hazırlık
Uygulamamızı Visual Studio 2010 Ultimate sürümünde ASP.NET MVC 3 Empty Template üzerinde yapacağız.
Giriş
Razor ifadeleri HTML encoded dır. Yani bu ataklara karşı doğal korumalıdır. Saldıraya yönelik olarak yazılan kodları çalıştırmaz ve doğrudan bir metin gibi yazar. Normalde biz sadece Alert diye belirtiyoruz. iframe ile işlem yapılması en aktif ve güncel kullanılan yöntemlerden birisidir. Bazı saldırı amaçlarının amacı sadece eğlenmek olabiliyorken, bazılarının amacı tamamen kötü niyetlidir ve size zarar vermek tek amaçlarıdır.
Uygulama
Kod:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> @{ string mesaj = "<script>alert('XSS saldırısı! Dikkatli Ol!')</script>"; } <span>@mesaj</span> </div> </body> </html>
Erkan Çıktısı:
HTML Çıktısı:
<span><script>alert('XSS saldırısı! Dikkatli Ol!')</script></span>
HTML.Raw Kullanımı
HTML.Raw ile metinsel bir içeriği encode olmadan gösterir.
Kod:
<span>@Html.Raw(mesaj)</span>
HTML Çıktısı:
<span><script>alert('XSS saldırısı! Dikkatli Ol!')</script></span>
Ekran Çıktısı:
JavaScript İçerisinden Gelen Tehlike
Razor ifadeleri için varsayılan olarak encoded olduğu yukarıda belirtim. Peki JavaScript içerisinde durum nasıl oluyor?
Kod:
HTML Çıktısı:
Ekran Çıktısı:
Ajax.JavaScriptStringEncode
HTML içerisinde HTML.Raw metotunu kullandık, peki JavaScript içerisinde ne kullacağız? Bu sorunun cevabı Ajax helper’i içerisindeki JavaScriptStringEncode metotudur.
Kod:
HTML Çıktısı:
Ekran Çıktısı:
Gördüğümüz gibi mesaj içerisindeki alert’i çalıştırmıştır. Kullanıcıdan alacağımız her türlü veri girişini kontrol etmemiz gerekiyor.
İndirme
Yazı için yapmış olduğum örneklere bu linkten indirebilirsiniz.
Yazımın girişinde söylediğim gibi, giriş seviyesinde bilgi içeren bir yazı oldu.
Umarım faydalı bir yazı olmuştur.
İyi çalışmalar
MVC ile kalın.