Ответ 1
ValidateInput и AllowHTML напрямую связаны с проблемами безопасности XSS.
Итак, сначала попробуем понять XSS.
XSS (межсайтовый скриптинг) - это атака безопасности, когда злоумышленник вводит вредоносный код во время ввода данных. Теперь хорошей новостью является то, что XSS по умолчанию помечен в MVC. Поэтому, если кто-то пытается опубликовать JavaScript или HTML-код, он приземляется с ошибкой ниже.
Но в реальном времени есть сценарии, где HTML должен быть разрешен, например, редакторов HTML. Таким образом, для этих сценариев вы можете украсить свое действие атрибутом ниже.
[ValidateInput(false)]
public ActionResult PostProduct(Product obj)
{
return View(obj);
}
Но подождите, здесь есть проблема. Проблема в том, что мы допустили HTML на полное действие, которое может быть опасным. Поэтому, если мы можем иметь более подробный контроль над полем или уровнем собственности, который действительно создал бы аккуратное, аккуратное и профессиональное решение.
Thats where AllowHTML полезен. Вы можете видеть в приведенном ниже коде, который я украсил "AllowHTML" на уровне свойства класса продукта.
public class Product
{
public string ProductName { get; set; }
[AllowHtml]
public string ProductDescription { get; set; }
}
Итак, суммирование "ValidateInput" позволяет размещать сценарии и HTML на уровне действия, а "AllowHTML" - на более узком уровне.
Я бы рекомендовал использовать "AllowHTML" больше, пока вы не будете уверены, что все действие должно быть обнаженным.
Я бы порекомендовал вам прочитать сообщение в блоге Предотвращение XSS-атак в ASP.NET MVC с использованием ValidateInput и AllowHTML, который шаг за шагом демонстрирует важность этих двух атрибутов с примером.