Asp.Net Formlarda Html Kod Gönderimine İzin Vermek (Temel S.

Kodla Büyü

togius

Süper Üye
Süper Üye
Mesajlar
1,728
A potentially dangerous Request.Form value was detected hatası sitemizin admini olşturuken daha çok karşılaşacağımız sorunlardan birisi. Aslında çok önemsiz ve çözümü basit bir sorun olsa da bilmeyen ve asp.net tecrübesi az olan kişilerin yapıdan uzaklaşmasına sebep oluyor benzer sorunlar. Burada aslında bir problem yok asp.net güvenliğin üst düzey olduğu bir yapı ve sitenizin form controllerinden sitenize saldırı yapmayı amaçlayan kötü niyetli kişilerin (ziyaretçi defteri vb.) gibi yapılardan script göndermesini engelleyen bir kontrol mekanizmasına sahip ancak bu bazen dezavantaja sahip olabilir.

Örneğin siz bir admininizde haber metni için multiline özelliğine sahip bir textbox kullanıyorsunuz diyelim. Buraya html karakterlerde girdiniz <b>..</b> gibi vs. html kodlarını gönderdiğimizde A potentially dangerous Request.Form value was detected hatasını alırız.

Çözümü:

<%@ Page Language=”C#” ..... sayfamızın başına ValidateRequest=”false” eklememiz yeterli olacaktır.

<%@ Page ValidateRequest=”false” Language=”C#” ......
 
Peki bu html kodunu sanitize etmek için bir çözümü var mı Asp.Net'in? <script>alert('siteyi hekledim')</script> yazanları nasıl durdururuz?
 
hocam yöntem çok basit bir class yardımıyla mesela

string _mesaj = mesaj.Text.Replace("<","[").Replace(">","]");
gibi
otomatik olarak script ifadeleri öldürürüz.
 
togius' Alıntı:
hocam yöntem çok basit bir class yardımıyla mesela

string _mesaj = mesaj.Text.Replace("<","[").Replace(">","]");
gibi
otomatik olarak script ifadeleri öldürürüz.
+
tabi daha iyi bir fonksiyon gerekli html kodlarını temizlemek için
bütün html kodları temizlenince bu sefer işimize yarayanları da kaldırmış olabiliriz. <b></b> gerekli ise mesela ilk başta <b> 'yi şeklinde değiştiririz. form işlem gördükten sonra geri dönüşüm yapmalıyız 'yi <b> 'ye çeviririz.
ufak bir hatırlatma, büyük formlarda gözden kaçan veri girişleri olabilir. en sağlamı form elemanlarını döngüye alarak temizleme yapmak, yani tek bir adımda bütün veri girişleri temizlenmiş olur. böylelikle gözden kaçan olmaz.
 
asp.nette bence büyük veri girişi yapılan formlarda <%@ Page ValidateRequest=”true” Language=”C#” ...... kullanmak en doğrusu ve hata olduğunda hata sayfasına yönlendirmek. İllaki ben kullanıcının script girmesine veya tag girmesine izin verebilmeliyim diyorsanız o zaman bunları oluşturduğunuz bir stored procedure de temizlemek en iyisi.
 
togius' Alıntı:
hocam yöntem çok basit bir class yardımıyla mesela

string _mesaj = mesaj.Text.Replace("<","[").Replace(">","]");
gibi
otomatik olarak script ifadeleri öldürürüz.

xss saldırıları için hazırlanmış sınıflar var, onları kullanmak daha faydalı olur
 
benimde başıma geldi böyle bir olay çok basit bir kısımda temizlemeyi unutmuştum. sonra akıllandım.
 
bazen hacklenmek iyidir. Başıma 1-2 kere geldi. Biri hazır scriptti sonra girdim tüm veritabanını alfanumerik şifreleyen kod yazdım. Yani elma ve armutu topladım. dbyi hackleyen bir halt anlamıyor ve kıramıyordu başıma 2006 yılında geldi bu olay. Birde 2007 de yaptığım bir siteyi çok basit bir yöntem kullanıp ele geçirmişler güvenliği hemen aldık elemanların saldırı yöntemleride elimize geçti :) Vakit sıkıntısından yazdığınız scriptlerde bazen böyle boşluklar bırakıyorsunuz ve oradan saldırı yiyebiliyorsunuz ama önlem almanız kolay oluyor ama size büyük tecrubeler kazandırıyor. Mesela sql injectionlar için stored procedureler kullanmak büyük bir önlem.
 
Ders çıkarmasını biliyorsan ve sana güvenen hiç kimse zarar görmediyse :)
 
Geri
Üst