В стандартном Html.DisplayTextFor () нет HTML-кодировки? - PullRequest
7 голосов
/ 20 марта 2012

В настоящее время мы имеем дело с некоторыми проблемами 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 будет вся строка <script xss="" src="htpp://ha.ckers.org/css.js">

Вопрос: ошибка, функция или янеправильно?

1 Ответ

2 голосов
/ 21 марта 2012

Html.DisplayTextFor действительно для взаимодействия с атрибутом [DisplayFormat] ( см. MSDN ).

Так что, если вы используете его с небезопасными значениями, вы должныпомните об этом и используйте [DisplayFormat(HtmlEncode = true)] в своем свойстве.

Редактировать: похоже, что свойство HtmlEncode на самом деле не применяется DataAnnotationsModelMetadataProvider (и DisplayTextFor).

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