Стандартный Html.DisplayTextFor() не кодирует HTML?

В настоящее время мы занимаемся некоторыми проблемами XSS в одном из наших проектов ASP.NET MVC. Я обнаружил две проблемы: первая связана с шаблоном проверки нашего запроса. Злоумышленник теперь может использовать эту дыру в системе безопасности, чтобы удалить недопустимый контент в нашу базу данных.

Вторая проблема заключается в том, как мы отображаем этот контент, и мы используем метод Html.DisplayTextFor, и он кажется «сломанным».

Просто создайте новое веб-приложение MVC 3, поместите его в HomeController:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">";

        User foo = new User();
        foo.Name = "<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">";

        return View(bla);
    }

    public ActionResult About()
    {
        return View();
    }
}

public class User
{
    public string Name { get; set; }
} 

Представление:

@Html.TextBoxFor(m => m.Name) <br/> ||| <-- will be encoded

@Html.Encode(ViewBag.Message)<br/> ||| <-- will be double encoded

@Model.Name <br/> ||| <-- will be encoded 

@Html.DisplayTextFor(m => m.Name) <-- no encoding
<br/> ||| 

Выводом DisplayTextFor будет вся строка