mehmetduran.com - Paylaşmak Güzeldir...
Jquery ile Ajax İşlemlerinde Güvenli Parametre (Data) Kullanımı
Bu yazımda Jquery ile Ajax işlemlerinde kullandığımız data özelliğini güvenli olarak nasıl kullanacağımızdan bahsedeceğim. Bu olayı hem Asp.net için hem de Asp.net MVC ile ele alacağız. Bildiğiniz gibi Ajax işleminde data özelliği ile server tarafında kullanılmak üzere kullanıcılardan alınan veriler veya sayfadan gelen veriler gönderilir. Bu verileri server tarafına sorunsuz, başarılı bir biçimde göndermek için birazdan bahsedeceğim gibi bir yapı kullanmalıyız. Bu yapı hiçbir eklenti olmadan Asp.net MVC ile sorunsuzca çalışırken, Asp.net ile sorun oluşuyor. Ancak bu sorunu script tarafında eklenti sayesinde yaptığımız bir çeviri ile çözebiliyoruz. Şimdi hem MVC ile hem de Asp.net ile güvenli parametre kullanımına bakalım.

Öncelikle Asp.net ile yapacağımız Ajax işlemlerinde kullandığımız ve kullanacağımız yönteme bakalım. Şimdiye kadar kullandığım riskli yöntem tıpkı Sql Injection gibi hatalara neden olacak bir yöntem. Bu yöntem verilerin servera doğru bir şekilde gitmesini engeller veya hatalara neden olur. Bu yüzden tercih etmemeliyiz. Bunun için verilerimizi kontrol ederek doğru biçimde servera göndermeliyiz. Bunun için hazırlanmış olan jquery - json eklentisini kullanabiliriz. (Eklenti hakkında buradan daha fazla bilgi edinebilir ve indirebilirsiniz.) Şimdi hem riskli kullanıma hemde güvenli kullanıma göz atalım.

  /* Webmethodumuz */
  [System.Web.Services.WebMethod]
  public static string Kayit(string isim, string soyisim)
  {
    // .....
    return "Kaydınız Başarıyla Alınmıştır.";
  }
 
/* Jquery Kodlarımız */
<script type="text/javascript">
    $(function() {
        $("#button").click(function() {
 
            /* Textbox'lardan değerler alınıyor */
            var Isim = $("#isim").val();
            var Soyisim = $("#soyisim").val();
 
            /* Riskli Ajax İsteğimiz, Tercih Edilmemeli */
            $.ajax({
                type: "POST",
                url: "ajax_parametre.aspx/Kayit",
                /* Riskli Kullanım */
                data: "{isim: '" + Isim + "', soyisim: '" + Soyisim + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    alert(msg.d);
                },
                error: function(msg) {
                    alert("Hata Oluştu.");
                }
            });
 
            /* Tercih Edilmesi Gereken Ajax İsteğimiz */
            var veriler = { isim: Isim, soyisim: Soyisim };
            $.ajax({
                type: "POST",
                url: "ajax_parametre.aspx/Kayit",
                /* Kullanmamız Gereken yöntem. Veriler Json tipine çevriliyor. */
                data: $.toJSON(veriler),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    alert(msg.d);
                },
                error: function(msg) {
                    alert("Hata Oluştu.");
                }
            });
        });
    });
</script>

Asp.net ile güvenli bir biçimde böyle kullanabiliriz. Böylece datalar içinde gelecek olan herhangi bir karakter sorun yaratmayacaktır. Eklenti ile gelen toJSON fonksiyonu ile verilerimizi json'a çevirmiş oluyoruz ve server tarafında algılanmasını sağlıyoruz. MVC'de ise eklentiye ihtiyaç duymadan kullanabiliyoruz. MVC ile sorunsuzca çalışan kodlarımıza ise şöyle:

  /* MVC Controller Kodlarımız */
  public class HomeController : Controller
  {
    public ActionResult Kayit(string isim, string soyisim)
    {
      // .....
      return Json("Kaydınız Başarıyla Alınmıştır.");
    }
  }
 
/* Jquery Kodlarımız */
<script type="text/javascript">
    $(function() {
        $("#button").click(function oku() {
 
            /* Textbox'lardan değerler alınıyor */
            var Isim = $("#isim").val();
            var Soyisim = $("#soyisim").val();
 
            /* Parametre bilgilerini bir değişkende tutuyoruz. */
            var veriler = { isim: Isim, soyisim: Soyisim };
 
            /* Ajax İsteğimiz */
            $.ajax({
                type: "post",
                url: "<%= Url.Action("Kayit", "Home") %>",
                data: veriler, /* Verileri data olarak gönderiyoruz. */
                dataType: "json",
                success: function(msg) {
                    alert(msg);
                },
                error: function(msg) {
                    alert(msg);
                }
            });
        });
    });
</script>

Bu şekilde bir kullanım ile servera ileteceğimiz verileri script bir değişkende tutuyoruz ve bu değişkeni olduğu gibi servera iletiyoruz. Böylece oluşacak karakter sorunlarından veya karakter kontrolünden kurtulmuş oluyoruz.

Asp.net'te eklentiye ihtiyaç duydum. Çünkü MVC'deki gibi bir kullanım ile hataya düşüyoruz. Bu şekilde bir kullanım ile eklenti olmadan Asp.net parametre değerlerini tam olarak algılayamıyor. Nedenini araştıramadım. Ancak eklenti ile sorunsuzca çalışmakta. Bu şekilde data kontrolü ile sorunsuzca Ajax işlemlerini gerçekleştirebiliriz.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Asp.net MVC Projesini Yayınlama (Publish Etmek) Asp.net MVC'de View'lara Veri Taşıma (Aktarma) Yöntemleri Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi) Host Sorunu ve Bloğuma Erişim Sıkıntısı Asp.net'te Generic Handler ile Ajax İşlemleri
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Salih Gedik 07 Temmuz Salı 2009 20:33 #1
Hmm. Ben şu sıralar EXTJS`nin JSON yollamak için güzel fonksiyonlar var. Acaba php ile böyle bir sorun çıkıyor mu? hiçbir fikrim yokki zaten ilginç bir durum. Bir de birşey merak ettim.şuan şu 500 karakter sayacı 85 te kaldı :D. Ayrıca mesaj post edilirken server tarafında 500 karakter için kontrol yaptın mı acaba? Yani operada ve firefoxta o 500 karakter sınırsıza dönüşebiliyor da o nedenle merak ettim.
Mehmet Duran 07 Temmuz Salı 2009 20:42 #2
Json göndermede aslında Asp.net`te de sorun olmaması lazım. Bunu yazımda da dediğim gibi araştıramadım. Şu sıralar MVC ile yönetim panelini hazırlıyorum. Bu işlemleri ağırlıkla kullanıyorum. Karakter sayaç olayında da elbette server tarafında kontrol ediyorum. Tamamen script ile yapılan kontrol güvenli olmayabilir.
Salih Gedik 09 Temmuz Perşembe 2009 21:06 #3
ASP.NET`te regex var mı?
Mehmet Duran 09 Temmuz Perşembe 2009 23:11 #4
Evet var. Javascript ile yapılabileceği gibi C# içinde tanımlı Regex sınıfı ile işlemleri yapabilirsin.
ömer 02 Ocak Cumartesi 2010 17:57 #5
asp.net mvc de yazdığınız jquery komutunu home klasörünün altında nereye yazacağız?Home klasörünün altında herhangibir .aspx uzantılı dosyaya yazdırabiliyorsak,örneğin o aspx uzantılı dosyanın ContentPlaceHolder içerisindeki main contentin içine mi hem html kodu hem de jquery kodu yazacağız?Eğer öyleyse ban hata alıyorum?asp.net mvc biraz zor geldi. Bir de hazır gelen Site.master ı nasıl değiştirebiliriz.HtmlAction linkleri falan var.Yani nasıl özgün hale getireceğiz?Tesekkürler..
Mehmet Duran 02 Ocak Cumartesi 2010 20:54 #6
Merhaba. Öncelikle MVC mantığını kavraman sorrduğun tüm soruların cevabını bulmanda yardımcı olacaktır. Script kodları istediğin her yere yazabilirsin. Aldığın hatanın ne olduğuna bakmak lazım. Görmeden bişey söylemek doğru olmaz. Master page örnek amacıyla öyle geliyor. Yeni bir masterpage oluşturarak sıfırdan herşeyi kendin oluşturabilirsin vey hazır gelen sayfanın içeriğini silebilirsin.
hakan sönmez 14 Şubat Pazar 2010 20:15 #7
Ben masterpage da jquery kullanmak istiyorum.ama ajax ile yani webmethod yazmam gerekiyor.Ama bunu yapamadım.Yani webmethodu yazdım herşey doğru ama sorum şu:masterpage.master.cs ye web methodumu yazıyorum.master page web method yazılabiliyor mu? sadece .aspx e mi yazılması gerekiyor.Mesela bu sitenin anasayfasındaki yan tarafta webmethod kullanıldı herhalde jquery ile.(Ama hersayfada da aynı şey olduğundan master sayfasına mı yazdınız acaba)web methodu master sayfasına yazılması gerekmiyor mu?
Mehmet Duran 14 Şubat Pazar 2010 20:27 #8
Merhaba. Öncelikle sitemin alt yapısı MVC ve MVC'de Webmethod'a gerek duymadan Action metotlar ile Ajax işlemi yapılabiliyor. Bu yüzden sitemde Webmethod yok. Masterpage olayında ise herhangi bir sayfaya webmetodu yazabilirsin. Örneğin ihtiyaç duyduğun webmetodu Default.aspx sayfasında tanımlayıp her yerde bu bu webmethodu kullanabilirsin. (url:"Default.aspx/WebmetohdAdi" gibi.)
ciwata 04 Mart Perşembe 2010 21:50 #9
success: function(msg) {alert(msg.d);} Burada serverside script tarafından ekrana basılan mesaj msg değişkenine gonderiliyor. msg.d neyi ifade ediyor ? Ekrana basılan değerleri değişkenlere aktarıp tekrar kullanmak bu şekilde mümkün mü ?
Mehmet Duran 05 Mart Cuma 2010 13:26 #10
Merhaba. Burada belirttiğin gibi server tarafında çalışan kodların sonucu msg değişkeni ile elde edilmekte. Ancak bazı durumlarda bu değişken değeri msg.d ile alınmakta. Yani msg ile msg.d arasında fark yok gibi. Sonuç Asp.net'te msg.d ile elde edilirken MVC'de msg ile elde edilmekte. Bu sonuçları değişkenlere aktararak tekrar kullanmak mümkün ama bu verilerin sürekli değişmeyen sabit veriler olması gerekir. Buna kodları yazan duruma göre karar vermelidir.
Özgür 02 Temmuz Cuma 2010 04:26 #11
Sitenin belki de en eski müdavimiyim. Ve sen ne büyük bir hayra vesile olduğunun farkında değilsin. :) Allah emeklerini boşa çıkarmasın inşallah. Selametle...
Mehmet Duran 02 Temmuz Cuma 2010 11:10 #12
Teşekkür ederim Özgür. Eğer söylediğin gibiyse ne mutlu bana.
Ahmet ARDA 30 Ağustos Pazartesi 2010 13:53 #13
Arkadaşım paylaşımların için teşekkürler.Sorum şu olacak yukarıdaki örnekteki gibi (asp.net eklenti ile çalışan örnek) var veriler = { numaralar: numara }; numara değikenine bir dizi değişkenini atadığımda (300,400,500 şeklinde) hata veriyor bu konuda yardımcı olursan sevinirim bu arada bloga ara verdin bu aralar merakla yeni yazılarını bekliyorum.
Mehmet Duran 30 Ağustos Pazartesi 2010 14:29 #14
Aldığın hatanın nedeni veriyi aktarırken formatı düzgün vermemen olabilir. Hata almamak için şöyle bir kullanım yapman yeterli olabilir.
var veriler = {numaralar:[ /*numaralar burada eklenecek*/]}
Burada dizi gibi bir yapı için verileri [] parantezleri arasına yazman gerekiyor.

Blog konusunda haklısın. İşler yoğun bu yüzden pek vaktim olmadı ama yazacak çok şey var. Fırsat bulduğumda yazmaya başlayacağım.
can kaya 03 Ekim Pazar 2010 17:10 #15
data: JSON.stringify( veriler), kullanımı daha dogru olacaktır.eklentiye ihtiyacınız kalmadan, {"isim":"ads'!2saqd!+1\"","soyisim":"asda"} bu şekilde bir cıktınız oluşacaktır. işleminiz başarıyla gerçekleşecektir.
Mehmet Duran 07 Ekim Perşembe 2010 11:16 #16
@can, zaten burada bahsettiğim işlem bu. Senin kullandığın eklenti farklı sadece. Burada paylaştığım $.toJSON eklentisi söylemiş olduğun işin aynısını yapmakta zaten.
hasan 25 Şubat Cuma 2011 00:23 #17
Kayıt fonksiyonu nerede acaba ?
Mehmet Duran 08 Nisan Cuma 2011 22:24 #18
@hasan, burada herhangi bir kayıt söz konusu değil. Anlatmak istediğim Ajax işlemlerinde ekrandan (kullanıcı tarafında) alınan verilerin sorunsuz biçimde sunucu tarafına aktarılması için izleyeceğimiz yöntem idi.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009