На самом деле атрибут ValidateInput
связан с проблемой XSS (Cross Site Security
).
XSS (Cross Site Security) - это атака безопасности, при которой злоумышленник вводит вредоносный код во время ввода данных. Этот код может быть JavaScript, VBScript или любым другим кодом сценария. После того, как код введен в браузер конечного пользователя. Этот код может запускаться и получать доступ к файлам cookie, сеансам, локальным файлам и т. Д.
Теперь хорошая новость заключается в том, что XSS по умолчанию запрещен в ASP.NET MVC. Поэтому, если кто-то пытается опубликовать код JavaScript или HTML с помощью ввода, он попадает со следующей ошибкой.
Потенциально опасное значение Request.Form обнаружено клиентом .....
Но в реальной жизни есть сценарии, в которых HTML должен быть разрешен, как редакторы HTML. Поэтому для подобных сценариев мы украшаем наш метод действия атрибутом ValidateInput
следующим образом:
[ValidateInput(false)]
public async Task<JsonResult> Contact(string message)
{
}
Но есть проблема сделать это. Мы разрешаем HTML и скрипт для полного действия, которое может быть опасным. Предположим, что форма, которую мы публикуем, имеет пять входных текстовых полей, теперь все пять текстовых полей могут содержать HTML и сценарии.
Вместо этого Статья Microsoft предлагает:
В приложениях ASP.NET MVC 3 или более поздней версии, когда вам необходимо отправить HTML обратно в модель, не используйте ValidateInput (false), чтобы отключить проверку запросов. Просто добавьте [AllowHtml] к свойству модели, например, так:
public class BlogEntry
{
public int UserId {get;set;}
[AllowHtml]
public string BlogText {get;set;}
}
Итак, суть в том, что ValidateInput
позволяет размещать скрипты и HTML на всем уровне действия, в то время как AllowHTML
находится на более детальном уровне.
Для получения более подробной информации вы можете прочитать ASP.NET Security - Защита ваших приложений ASP.NET