Отображать дружественное сообщение об ошибке при вводе HTML-тега в текстовое поле - MVC ASP.NET - PullRequest
1 голос
/ 12 сентября 2011

У меня есть требование проверки ввода пользователя в текстовом поле. Каждый раз, когда вводится HTML-тег, он должен отображать то же представление с дружественным сообщением об ошибке, например «Невозможно ввести HTML-теги».

Пути, которые я до сих пор пробовал:

  1. [ValidateInput (true)] на контроллере - появляется ошибка «Потенциально опасный запрос»
  2. [ValidateInput (false)] на контроллере - хранит значение в базе данных (я этого не хочу)
  3. В представлении Model я поместил тег для свойства [RegularExpression ( "<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>",ErrorMessage = "You have entered html…Html is not a valid input!" )]

любой имел эту проблему. Если да, пожалуйста, дайте мне знать, как вы это исправили.

Спасибо

Ответы [ 3 ]

3 голосов
/ 12 сентября 2011

Вы можете использовать атрибут [AllowHtml]:

[AllowHtml]
[RegularExpression (@"^[^<>]*$", ErrorMessage = "You have entered html... Html is not a valid input!" )]
public string SomePropertyThatShouldNotAcceptHtml { get; set; }

Очевидно, что перед сохранением в базе данных вы должны убедиться, что содержимое безопасно:

[HttpPost]
public ActionResult Save(MyViewModel model)
{
    if (!ModelState.IsValid) 
    {
        // the model is invalid => redisplay view
        return View(model);
    }

    // the model passed validation => store in the database    
    ...
    return RedirectToAction("Success");
}

И если вы боитесьВ XSS вы можете использовать библиотеку AntiXSS , которая отфильтровывает все опасные сценарии из HTML.Вы даже можете написать пользовательский механизм связывания модели, который будет выполнять этот шаг и автоматически назначать этому свойству только безопасное значение HTML .

0 голосов
/ 13 сентября 2011

Теперь он работает, отображая понятное сообщение об ошибке. Я немного изменился, добавив тег Validateinput на контроллере Post Action.

Я должен добавить это в ViewModel

[AllowHtml]
[RegularExpression (@"^[^<>]*$", ErrorMessage = "You have entered html... Html is not a valid input!" )]
public string SomePropertyThatShouldNotAcceptHtml { get; set; }

Контроллер в действии

Я должен добавить тег в событие Post

[Validateinput(false)]

Спасибо, Дарин.

0 голосов
/ 12 сентября 2011

Доброе утро, это выглядит как отличная отправная точка, чтобы справиться с вашими требованиями.Проверьте это статья .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...