Tags: , , , , , , , | Categories: Hata, Web Uygulaması Posted by okutbay on 18.06.2009 14:47 | Yorumlar (0)

İş yerinde geliştirmekte olduğumuz projelerde şimdiye kadar MVC Framework Preview 3 kullanmaktaydık. ASP.NET ten farklı çalışma mekanizması nedeniyle yukardaki hatayı sık sık alır ve  ValidateRequest = false yapmamıza rağmen sorunu aşamazdık. Çünkü post edilen bilgi önce kontroller a düşmekte ve exception oluşmaktaydı.

Peki temel olarak bu hatanın nedei neydi. Önce bunu bir hatırlayalım. 

ASP.NET kullanan yazılımcılar form alanlarından gelebilecek zararlı kodlara karşı daha fazla korunmaya sahiptirler. Yapılabilecek XSS (Cross site script) saldırılarını önlemek yapılan tüm istekler bir geçerlilik kontrolü (validation) işleminden geçer. Bu işlemde temel olarak script bloklarını başlatan ve bitiren taglerde yer alan < ve > işaretleri aranır. Bulunduğu zaman da "System.Web.HttpRequestValidationException" oluşturulur.

Bu sorunu geçiştirmek için sayfa seviyesinde ya da uygulama seviyesinde (ki bu hiç mi hiç tavsiye edilmez.) Geçerlilik kontrolünü kapatabilirsiniz. Bu durumda dış kaynaklardan gelen tüm girdileri zararlı olabilecek metinlere, karakterlere karşı kontrol etmeniz ve filtrelemeniz gerekmektedir.

Bizim durumumuzda ise hiçbir şekilde bu geçerlilik kontrolü geçiştirilememekteydi. Ta ki MVC 1.0  çıkana kadar. Aslında bu özellik Preview 4 ile birlikte gelmesine rağmen biz 3 den direkt olarak MVC 1.0 a atladığımızdan burada farkına varabildik.

Bu yenilik sayesinde controller class tanımımız ya da herhangi bir controller action metod tanımımız için "istek geçerlilik kontrolü"nü devre dışı bırakabiliyoruz.

Şöyle ki: 

    1 [ValidateInput(false)]

Bu öznitelik (attribute) sayesinde konulduğu yere göre ilgili controller sınıfının tüm metodları ya da sadece belirli action metodları için bu özellik iptal edilebilmekte.

sınıf Seviyesinde kullanım 

    1 [ValidateInput(false)]

    2 public class BilgilerController : Controller

    3 {

    4 }

 Controller Action seviyesinde kullanım 

    1 [ValidateInput(false)]

    2 public ActionResult BilgilerFormIslem()

    3 {

    4     return View("abc");

    5 }

Böylece ilgili sayfalarda HTML kod kabul eden editör vb. kontroller kullanabiliyoruz. Tabi tekrar hatırlatalım. Bu durumda gelen içeriğin güvenli olup olmadığının denetlenmesi ya da filtrelenmesi yazılımcı tarafından gerçekleştirilmek zorunda...

Kolay gelsin... 

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Programlama, Web Uygulaması Posted by okutbay on 06.02.2009 12:22 | Yorumlar (0)

Milliyet gazetesi Internet yazılım hizmetlerinde çalışmaya başladığımda arabam.com web sitesinin mevcut veritabanı ve sınıf kütüphanesi kullanılarak yeniden yazılamsı isteniyordu... .NET 1.1 de geliştirilmiş olan mevcut uygulamayı yeni teknolojilerle yazalım istedik... Visual Studio 2008 + .Net Framework 3.5 + MVC Framework Preview ile geliştirme yapma kararı alındı... Özellikle preview durumda olan bir framework kullanmak oldukça çılgın bir yaklaşımdı...MVC seçmemizin en büyük nedeni asp.net form ve viewstate kullanmıyor olmasıdı. Bu bir nevi ASP yıllarına geriş dönüştü bizim için. Ama bir farkla. .NET frameworkün gücü sonuna kadar bizimleydi.

Sitenin geliştirilmesi sırasında MVC framework tam 4 yeni preview daha yaptı :) Geçtiğimiz günlerde ise Release Candidate olan 1.0 versiyonunu kullanımıza sundu...

İlk görüşte aşk var ise MVC 1.0 bunu başarıyor... Geçmiş releaselerde bulunan eksiklikler yazılımcının hayatını kolaylaştıracak özelliklerle giderilerek çok daha rahat kullanılabilir hale gelmiş...

Release edilmesini sabırsızlıkla beklyorum... Sonrasında vakit bulursam konu ile ilgili yazılar yazmayı planlıyorum...

Sizler de bu arada resmi siteden gelişmeleri takip edebilirsiniz...

http://www.asp.net/mvc/

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5