﻿
{"id":9778,"date":"2018-10-04T21:17:06","date_gmt":"2018-10-04T21:17:06","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=9778"},"modified":"2018-10-04T21:27:06","modified_gmt":"2018-10-04T21:27:06","slug":"asp-net-core-2-mvcde-bind-attribute-ile-post-data-guvenligi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-2-mvcde-bind-attribute-ile-post-data-guvenligi\/","title":{"rendered":"Asp.NET Core 2 MVC&#8217;de Bind Attribute \u0130le Post Data G\u00fcvenli\u011fi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir web projesinde, sistemin g\u00fcvenli\u011fi ile birlikte verilerin g\u00fcvenli\u011fide sa\u011flanmal\u0131d\u0131r. Burada veri g\u00fcvenli\u011finden kast\u0131m\u0131z kay\u0131t alt\u0131ndaki verilerden ziyade kullan\u0131c\u0131 ile girilen etkile\u015fim neticesinde elde edilen verilerdir. Bu duruma \u00f6rnek olarak post datalar\u0131 verebiliriz. Bir form arac\u0131l\u0131\u011f\u0131yla kullan\u0131c\u0131dan al\u0131nan bilgilerin post edilmesi sonucu server taraf\u0131nda nesne \u015feklinde bir b\u00fct\u00fcn olarak elde etti\u011fimiz durumlardaki bu veriler, olas\u0131 spesifik durumlara istinaden korumaya al\u0131nmal\u0131 ve hatta k\u00f6t\u00fc niyetli insanlar\u0131n hamlelerine kar\u015f\u0131 baz\u0131 \u00f6nemsiz veriler g\u00f6z ard\u0131 edilmelidir.<\/p>\n<p>Bind Attribute&#8217;u kullan\u0131c\u0131 taraf\u0131ndan post edilen veriyi kar\u015f\u0131layacak olan modelin<span style=\"font-size:10px;\">(bir ba\u015fka deyi\u015fle bind edilece\u011fi modelin)<\/span> alanlar\u0131n\u0131 g\u00fcvenli\u011fe alabilmemizi sa\u011flayacak bir i\u015flevselli\u011fe sahip attributetur.<\/p>\n<p>Anlat\u0131m\u0131 daha da netle\u015ftirebilmek i\u00e7in a\u015fa\u011f\u0131daki g\u00f6rselde bulunan kod blo\u011funu ele alal\u0131m;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi.png\" alt=\"Asp.NET Core 2 MVC&#039;de Bind Attribute \u0130le Post Data G\u00fcvenli\u011fi\" width=\"451\" height=\"138\" class=\"aligncenter size-full wp-image-9782\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi.png 451w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-300x92.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/a><br \/>\nG\u00f6rselde kullan\u0131c\u0131 taraf\u0131ndan yap\u0131lan post neticesinde g\u00f6nderilen data &#8220;Employee&#8221; tipinden &#8220;model&#8221; referansl\u0131 parametre taraf\u0131ndan yakalanmakta ya da bir ba\u015fka deyi\u015fle bind edilmektedir.<\/p>\n<p>Asl\u0131nda bu yap\u0131, bu g\u00fcne kadar kulland\u0131\u011f\u0131m\u0131z model binding yap\u0131s\u0131n\u0131n ta kendisidir. Model binding i\u015fleminde, post edilen data, o datan\u0131n alanlar\u0131na birebir e\u015fde\u011fer alanlar bar\u0131nd\u0131ran bir model taraf\u0131ndan kar\u015f\u0131lanabilmekte ve modelin propertyleri ile e\u015f de\u011fer olan t\u00fcm alanlar ilgili propertylere bind edilerek temsil edilmektedir.<\/p>\n<p>Bizim niyetimiz; post neticesinde elde edilen alanlara Bind Attribute ile m\u00fcdahale ederek, kullan\u0131c\u0131 taraf\u0131ndan g\u00f6nderilen ama bizim taraf\u0131m\u0131zdan bir \u00f6nemi olmayan t\u00fcm verileri g\u00f6rmezden gelerek post datay\u0131 kar\u015f\u0131layacak model parametremizin bind edilecek propertylerini belirlemektir. Bu \u015fekilde k\u00f6t\u00fc niyetli kullan\u0131c\u0131lar\u0131n yapabilece\u011fi her t\u00fcrl\u00fc sald\u0131r\u0131ya kar\u015f\u0131 manevra yapm\u0131\u015f olacak ve l\u00fczumsuz olan verilerin nesne \u00fczerinde ta\u015f\u0131nmas\u0131na mani olarak yersiz y\u00fck\u00fc minimize ederek micro d\u00fczeyde optimizasyon sa\u011flam\u0131\u015f olaca\u011f\u0131z.<\/p>\n<p>Bind attribute&#8217;unun kullan\u0131m\u0131 i\u00e7in a\u015fa\u011f\u0131daki g\u00f6rseli inceleyebilirsiniz;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-1.png\" alt=\"Asp.NET Core 2 MVC&#039;de Bind Attribute \u0130le Post Data G\u00fcvenli\u011fi\" width=\"839\" height=\"132\" class=\"aligncenter size-full wp-image-9789\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-1.png 839w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-1-300x47.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/10\/Asp.NET-Core-2-MVCde-Bind-Attribute-\u0130le-Post-Data-G\u00fcvenli\u011fi-1-768x121.png 768w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/a><br \/>\nG\u00f6rseli incelerseniz e\u011fer post datadan gelen verilerin sadece &#8220;Name&#8221; ve &#8220;SurName&#8221; kolonlar\u0131na bind edilmesini dolay\u0131s\u0131yla gerisinin g\u00f6rmezden gelinmesini belirtmi\u015f bulunmaktay\u0131z. Netice olarak, elde etti\u011fimiz veriler sadece bind attribute&#8217;u ile belirttiklerimiz olacakt\u0131r.<\/p>\n<p>Bind attribute&#8217;unu kullanabilece\u011fimiz bir ba\u015fka yol ise direkt olarak entity s\u0131n\u0131f\u0131m\u0131zd\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Bind(nameof(Employee.Name), nameof(Employee.SurName))]\r\n    public class Employee\r\n    {\r\n        public int Id { get; set; }\r\n        public string Name { get; set; }\r\n        public string SurName { get; set; }\r\n        public string City { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<p>Bu \u015fekilde bir kullan\u0131m yukar\u0131da yapt\u0131\u011f\u0131m\u0131z \u00f6rnekle esas\u0131nda ayn\u0131 i\u015fi temsil etmekte ve birebir benzer sonu\u00e7la neticelenmektedir.<\/p>\n<p>Ayr\u0131ca entity s\u0131n\u0131f\u0131nda &#8220;BindNever&#8221; attribute&#8217;unu kullanarak bind edilmesini istemedi\u011fimiz propertyleri a\u015fa\u011f\u0131daki \u00f6rnekte oldu\u011fu gibi belirtebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Employee\r\n    {\r\n        public int Id { get; set; }\r\n        public string Name { get; set; }\r\n        public string SurName { get; set; }\r\n        &#x5B;BindNever()]\r\n        public string City { get; set; }\r\n        &#x5B;BindNever()]\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bir web projesinde, sistemin g\u00fcvenli\u011fi ile birlikte verilerin g\u00fcvenli\u011fide sa\u011flanmal\u0131d\u0131r. Burada veri g\u00fcvenli\u011finden kast\u0131m\u0131z kay\u0131t alt\u0131ndaki verilerden ziyade kullan\u0131c\u0131 ile girilen etkile\u015fim neticesinde elde edilen verilerdir. Bu duruma \u00f6rnek olarak post datalar\u0131 verebiliriz.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":9596,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2668,2656],"tags":[2651,1632,2683,2684,2682],"class_list":["post-9778","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core-2","category-asp-net-core-2-mvc","tag-asp-net-core-2-mvc","tag-bind","tag-bind-attribute","tag-bindnever","tag-bindnever-attribute"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=9778"}],"version-history":[{"count":14,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9778\/revisions"}],"predecessor-version":[{"id":9794,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9778\/revisions\/9794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/9596"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=9778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=9778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=9778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}