ASP.NET MVC 3 Razor İpucu 3 – XSS Olarak Bilinen Cross-Site Script Saldırıları HTML Encoding – 1


asp-net-MVC3

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>&lt;script&gt;alert('XSS saldırısı! Dikkatli Ol!')&lt;/script&gt;</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.

 

, , , , , , ,

  1. ASP.NET MVC 3 Razor İpuçu 4 – HTML 5 Sürükle Bırak Dosya Yükleme (Drag-Drop File Upload) « Mahmut Can Sözeri
  2. [Blog Post(Turkish)] ASP.NET MVC İle İlgili Tüm Yazılarım (29 Yazı, 1 Yazı Dizisi ve 1 İpucu Serisi) « Mahmut Can Sozeri

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s