انتقال تجربیات در حوزه برنامه نویسی دات نت

۲ مطلب با موضوع «MVC» ثبت شده است

امنیت در MVC - جلوگیری از ارسال اطلاعات اضافی در Model

در ورژن های قبلی MVC وقتی در سمت View اطلاعات توسط کاربر وارد میشد و صفحه post میشد در سمت سرور باید مدل را میگرفتیم و تک تک فیلدهای آن را متناظر با فیلدهای مدل مورد نظر خودمان قرار میدادیم که خیلی زمان بر بود. در MVC5 یک ویژگی اضافه شد که اتوماتیک اطلاعات وارد شده در سمت view را map میکرد.

        [HttpPost]
public ActionResult Index(Models.Person person)
{
return View();
}

فرض کنید در مثال بالا مدل Person یک فیلد Name و یک فیلد isAdmin دارد و شما در سمت view فقط یک input قراردادید با نام name وقتی کاربر فرم رو پست میکنه اتوماتیک فیلد Name مدل person برابر با مقدار ورودی کاربر قرار میگیره و bind میشه. اما مشکل اینجاست که اگه یک هکر صفحه view رو تغییر بده و یک checkbox اضافه کنه و فرض کنید به نحوه متوجه بشه که در مدل ما یک فیلد isAdmin نیز وجود داره و نام اون checkbox رو isAdmin بزار به راحتی در سمت سرور مقدار دلخواه وارد isAdmin میشه و کاربر میتونه نقش مدیر رو بگیره.

برای جلوگیری از این کار دستور Bind پیشنهاد میشه که درون اون با دستور include میتوانیم یک لیست سفید درست کنیم و بگوییم فقط این آیتم هایی که ما میگوییم bind شوند و یا توسط Exclude میتوان لیست سیاه درست کرد که در این صورت تمام آیتم ها bind میشوند به جز لیستی که اعلام میشود. مثال:

        [HttpPost]
public ActionResult Index([Bind(Exclude = "IsAdmin")] Models.Person oPerson)
{
return View();
}

در مثال بالا تمامی آیتم های مدل Person میتوانن مقدار دهی شوند به جز فیلد isAdmin حتی اگه در سمت view کنترل مربوط به isAdmin رو هم قرار بدهید باز هم مقدار نمیگیرد.



۲۰ شهریور ۹۵ ، ۱۱:۰۳ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

T4MVC چیست؟

T4MVC ابزاری است که به کمک آن میتوانید آدرس دهی در سایت خود را Strongly Typed کنید. بدین معنی که بجای اینکه یک آدرس رشته ای بدهید ، داینامیک میتوانید عناصر موجود در سایت خود را مشاهده و به قسمت مورد نظر خود اضافه کنید.

برای نصب این بسته دستور زیر را در Nuget تایپ کنید:

Install-Package T4MVC

برای استفاده از این بسته مثلا میخواهیم آدرس یک Layout را بدهیم که بجای دستور:

Layout = "~/Views/Shared/Layouts/_MasterLayout.cshtml";

مینویسیم:

Layout=MVC.Shared.Views.Layouts._MasterLayout;

از مزیت های این روش سهولت در کار و البته جلوگیری از خطاهای تایپی است.


اما معایب این روش:

بنده به شخصه پس از تجربه کار با T4MVC فعلا به این نتیجه رسیدم که از این بسته استفاده نکنم! به دو دلیل:

اول اینکه پس از نصب و راه اندازی T4MVC تمام کلاسهای شما به Partial و اکشن های شما به Virtual تغییر میکنه که این اصلا برای من خوشایند نبود.

دوم اینکه گاهی اوقات پس از اضافه کردن یک اکشن جدید و Run as custom tool نمودن! t4 خطاهای عجیبی در پروژه پیش میاد.




۱۰ شهریور ۹۵ ، ۰۷:۲۶ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر