Asp.NET Core 2 MVC’de Bind Attribute İle Post Data Güvenliği

Merhaba,

Bir web projesinde, sistemin güvenliği ile birlikte verilerin güvenliğide sağlanmalıdır. Burada veri güvenliğinden kastımız kayıt altındaki verilerden ziyade kullanıcı ile girilen etkileşim neticesinde elde edilen verilerdir. Bu duruma örnek olarak post dataları verebiliriz. Bir form aracılığıyla kullanıcıdan alınan bilgilerin post edilmesi sonucu server tarafında nesne şeklinde bir bütün olarak elde ettiğimiz durumlardaki bu veriler, olası spesifik durumlara istinaden korumaya alınmalı ve hatta kötü niyetli insanların hamlelerine karşı bazı önemsiz veriler göz ardı edilmelidir.

Bind Attribute’u kullanıcı tarafından post edilen veriyi karşılayacak olan modelin(bir başka deyişle bind edileceği modelin) alanlarını güvenliğe alabilmemizi sağlayacak bir işlevselliğe sahip attributetur.

Anlatımı daha da netleştirebilmek için aşağıdaki görselde bulunan kod bloğunu ele alalım;
Asp.NET Core 2 MVC'de Bind Attribute İle Post Data Güvenliği
Görselde kullanıcı tarafından yapılan post neticesinde gönderilen data “Employee” tipinden “model” referanslı parametre tarafından yakalanmakta ya da bir başka deyişle bind edilmektedir.

Aslında bu yapı, bu güne kadar kullandığımız model binding yapısının ta kendisidir. Model binding işleminde, post edilen data, o datanın alanlarına birebir eşdeğer alanlar barındıran bir model tarafından karşılanabilmekte ve modelin propertyleri ile eş değer olan tüm alanlar ilgili propertylere bind edilerek temsil edilmektedir.

Bizim niyetimiz; post neticesinde elde edilen alanlara Bind Attribute ile müdahale ederek, kullanıcı tarafından gönderilen ama bizim tarafımızdan bir önemi olmayan tüm verileri görmezden gelerek post datayı karşılayacak model parametremizin bind edilecek propertylerini belirlemektir. Bu şekilde kötü niyetli kullanıcıların yapabileceği her türlü saldırıya karşı manevra yapmış olacak ve lüzumsuz olan verilerin nesne üzerinde taşınmasına mani olarak yersiz yükü minimize ederek micro düzeyde optimizasyon sağlamış olacağız.

Bind attribute’unun kullanımı için aşağıdaki görseli inceleyebilirsiniz;
Asp.NET Core 2 MVC'de Bind Attribute İle Post Data Güvenliği
Görseli incelerseniz eğer post datadan gelen verilerin sadece “Name” ve “SurName” kolonlarına bind edilmesini dolayısıyla gerisinin görmezden gelinmesini belirtmiş bulunmaktayız. Netice olarak, elde ettiğimiz veriler sadece bind attribute’u ile belirttiklerimiz olacaktır.

Bind attribute’unu kullanabileceğimiz bir başka yol ise direkt olarak entity sınıfımızdır.

    [Bind(nameof(Employee.Name), nameof(Employee.SurName))]
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SurName { get; set; }
        public string City { get; set; }
        public int Age { get; set; }
    }

Bu şekilde bir kullanım yukarıda yaptığımız örnekle esasında aynı işi temsil etmekte ve birebir benzer sonuçla neticelenmektedir.

Ayrıca entity sınıfında “BindNever” attribute’unu kullanarak bind edilmesini istemediğimiz propertyleri aşağıdaki örnekte olduğu gibi belirtebiliriz.

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SurName { get; set; }
        [BindNever()]
        public string City { get; set; }
        [BindNever()]
        public int Age { get; set; }
    }

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.