Asp.Net Mvc De Xss E Karşı Nasıl Korunuyoruz?
-
Asp.net mvc projesinde kullanıcıdan bir jquery editörü ile (summernote vs gibi.) girdi alıyorum.Veritabanına kaydediyorum.Sonra bunu ekrana basarken adam <script> falan yazdıysa yada başka zararlı ne yazabilir bilmiyorum.Bunun önlemini nasıl alıyoruz? Biraz araştırdım.
http://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/avoiding-cross-site-scripting-xss-attacks-with-antixss-in/ burda adam anlatmıs bunu yapınca projemize 2 adet assembly ekleniyor. AntiXssLibrary
ve HtmlSanizationLibrary diye ancak sonra farkettimki bu yazı biraz eski adamlar zaten .net e AntiXssLibrary yi eklemişler. Yani bu linkte yazan yine microsoftun çıkarmış olduğu antixsslibrary System.Web.Security.AntiXss.AntiXssEncoder altında .net e eklenmiş.Adam örnekte HtmlSanizationLibrary içindeki Sanitize sınıfının GetSafeHtmlFragment metodunu cagırmıs.Ama bu Sanitize sınıfının GetSafeHtmlFragment metodunun karşılıgını .net içinde bulamadım. Şimdi ben veritabanından ekrana verileri basarken ne şekilde basmalıyım? HttpUtility.HtmlEncode , AntiXssEncoder.HtmlEncode .net içindede 1 den fazla htmlencode metodu var. Kafam karıştı biraz , aydınlatırsanız sevinirim.
-
Hiç karşılaşmadım açıkcası.
script tagı olmadan dbye kaydettir. çağırırken de script içerisinde ekrana basarsın.
ontedi tarafından 03/May/16 15:23 tarihinde düzenlenmiştir -
işte script tagı olmadan nasıl db ye kayıt ettiricem onu merak ettim adam gitti <p><script>alert('selam')</script></p> yazdı mesela editöre(şuan bende yazmış oldum mesela) ben bunu c# tarafında string sınıfının replace gibi metodları ile kendimmi kontrol edeyim? Yoksa bunun hazırı var mıdır? Hazırı var zaten verdiğim linkte ama ben o linke gerek olmadan .net içinde hazır bişey var mı onu bulamadım.
-
Hannibal_King bunu yazdı
işte script tagı olmadan nasıl db ye kayıt ettiricem onu merak ettim adam gitti
// <!CDATA 'selam' // >
yazdı mesela editöre(şuan bende yazmış oldum mesela) ben bunu c# tarafında string sınıfının replace gibi metodları ile kendimmi kontrol edeyim? Yoksa bunun hazırı var mıdır? Hazırı var zaten verdiğim linkte ama ben o linke gerek olmadan .net içinde hazır bişey var mı onu bulamadım.
Aynen dediğin gibi bir method ile replace ettir.
public static string HTMLTagTemizle(this string icerik) { while (icerik.IndexOf(">") > -1) { icerik= icerik.Replace(icerik.Substring(icerik.IndexOf("<"), icerik.IndexOf(">") - icerik.IndexOf("<") + 1), ""); } icerik= icerik.Replace("\"", ""); return icerik; }
SSH tarafından 03/May/16 16:06 tarihinde düzenlenmiştir -
Hocam default olarak asp.net de xss hatası üretebilecek bilgiler postda filtreleniyor.
-
Şimdi baktım jquery editörü otomatik olarak < ve > karakterlerini değiştiriyor ancak adam gider unicode olarak yazarsa yine problem oluyor \u003c şeklinde de yazabilir.Muhtemelen 1.postta verdiğim linkteki fonksiyonu kullanıcam güzel çalışıyordu o ama devam ediyorum araştırmaya konu hakkında bilgiye ihtiyacım var hala.
-
Şu anki sınıf bu (4.5 için olmalı). https://msdn.microsoft.com/en-us/library/system.web.security.antixss.antixssencoder%28v=vs.110%29.aspx
Eğer kullanıcıdan sadece düz yazı alacaksan unicode beyaz liste işlemini de kullanabilirsin.
-
Kullanıcıdan aldığım girdide html tagları css ler falan olacak bold italic falan yani adam editörden aynı wordpress teki gibi makale giricek.Terror hocamın dediği gibi default olarak asp.net engellediği için html taglarını falan action metodun üzerine validateInput="false" attribute unu yazdım.
Şuanki durumda kullanıcı istediği script i veritabanına kaydedebiliyor çünkü validateinput = false olarak ayarlı.Ben de bunu veritabanından çekince nasıl bastıracağım? System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode bunu kullanıyorum bu sefer bold <b> diye basıyor html de yorumlanmıyo.
-
Default ayarlarda bizim html yada script taglerını girmemize engel olan yapının tamamı AntiXssLibrary sanırım. Ben controller içinde bulunan action metodlara attribute olarak validateInput="false" dediğim zaman galiba bu yapıyı devre dışı bırakmış oluyorum. Bu noktadan sonrada html taglarına izin verip script taglerini engellemek için html sanitizer gerekiyor sanırım.
Ama validateInput="false" demeyip kullanıcı girdilerindeki < > gibi karakterleri client tarafında asp.net mvc nin izin vereceği formata dönüştürmek daha mantıklı sanırım. Nury nin yazdığı html encode ile o şekilde yapmak gerekicek sanırım.Henuz denemedim ama bir de bu yaklaşımı deneyeyim.
-
Mobil olduğum için uzun uzun yazmaya üşeniyorum ancak yukarıda yazılanların hiç biri tam çözüm değil.
Referans olarak owasp'ın prevent xss dökümanlarını inceleyin. Owasp xss Cheat sheet çok uzun, engellemeyi öğrenmek için onu okumaya gerek yok.
nessaj tarafından 03/May/16 20:29 tarihinde düzenlenmiştir -
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet bu dökümanı diyosun sanırım hocam. Yine mobilde olmadığın zaman daha ayrıntılı paylaşım yaparsan sevinirim.
