ویژگی ValidateInput(false) همراه با نحوه کاربرد و مثال در ASP.Net MVC
با سلام در این مقاله، یک آموزش ساده در مورد ویژگی های ValidateInput (false) در ASP.Net MVC همراه با کاربردی و همچنین نمونه هایی از کاربرد آن را توضیح می دهیم .
Attribute ValidateInput (false) برای اجازه دادن به ارسال محتویات HTML یا کدها به سرور استفاده می شود که توسط ASP.Net MVC به طور پیش فرض برای جلوگیری از حملات XSS (Cross Site Scripting) غیر فعال است.
حملات XSS (Cross Site Scripting)
در حملات XSS (Cross Site Scripting)، یک هکر تلاش می کند تا کد HTML یا جاوا اسکریپت را به یک وب سایت از طریق زمینه های INPUT مانند TextBoxes، TextAreas، و غیره تزریق کند. از این رو هنگامی که چنین محتوای نامعتبر شناسایی می شود، Exception بعدی را می گیرد.

ویژگی ValidateInput(false) همراه با نحوه کاربرد و مثال در ASP.Net MVC
ویژگی ValidateInput را می توان در سطح Controller و همچنین در سطح روش Action استفاده کرد. در زیر توضیحات داده شده است .
1. ویژگی ValidateInput در سطح اقدام
ویژگی ValidateInput را می توان به یک روش Action Controller اعمال کرد و اعتبار آن توسط ASP.Net MVC تنها برای آن روش Action خاص غیرفعال می شود .
مزایا
دامنه محدود به روش خاصی از کلاس Controller می باشد.
اگر خواص چندگانه محتوای HTML را قبول کرده باشید، این روش باعث کاهش کارآیی می شود.
هنگامی که کلاس Model برای طراحی عناصر فرم استفاده نمی شود، این ویژگی مورد نیاز است.
معایب
تمام فیلدهای فرم ارسال اطلاعات در یک روش می تواند محتوای HTML را ارسال کند، هرچند تنها یک یا چند مورد ممکن است برای ارسال نیاز باشد.
مثال :
Model
public class PersonModel
{
[Display(Name = "Resume:")]
public string Resume { get; set; }
}
Controller
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
[HttpPost]
[ValidateInput(false)]
public ActionResult Index(PersonModel person)
{
return View();
}
}
View
@model Potential_Dangerous_MVC.Models.PersonModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Index</title>
</head>
<body>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<table>
<tr>
<td>@Html.LabelFor(m => m.Resume)</td>
<td>@Html.TextAreaFor(m => m.Resume)</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"/></td>
<td></td>
</tr>
</table>
}
</body>
</html>
2. ویژگی ValidateInput در سطح Controller
ویژگی ValidateInput همچنین می تواند به یک Controller اعمال شود و اعتبار سنجی توسط ASP.Net MVC برای تمام روش های آن کنترل خاص غیر فعال خواهد شد.
مزایا
دامنه محدود به کلاس Controller خاص است.
اگر چندین روش عمل پذیری محتوای HTML را قبول کرده باشید، این روش باعث کاهش کارآیی می شود.
هنگامی که کلاس Model برای طراحی فرم های چندگانه استفاده نمی شود، این روش مفید است.
معایب
تمام فیلدهای فرم ارسال اطلاعات در تمام روش ها می تواند محتوای HTML را ارسال کند، هرچند تنها یک یا چند مورد ممکن است برای ارسال نیاز باشد.
مثال :
Model
public class PersonModel
{
[Display(Name = "Resume:")]
public string Resume { get; set; }
}
Controller
[ValidateInput(false)]
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(PersonModel person)
{
return View();
}
}
View
@model Potential_Dangerous_MVC.Models.PersonModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Index</title>
</head>
<body>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<table>
<tr>
<td>@Html.LabelFor(m => m.Resume)</td>
<td>@Html.TextAreaFor(m => m.Resume)</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"/></td>
<td></td>
</tr>
</table>
}
</body>
</html>