2010-02-17 3 views
2

Если имя ссылки выведено из базы данных, вы должны вызывать метод Html.Encode для очистки имени?Должен ли вызываться Html.Encode при создании ActionLinks в ASP.NET MVC

Например:

Html.ActionLink(Model.PersonFromDB.FirstName, 
       "Action", 
       "Controller", 
       new RouteValueDictionary { { "id", Model.PersonFromDB.Id } }, 
       null) 

или:

Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName), 
       "Action", 
       "Controller", 
       new RouteValueDictionary { { "id", Model.PersonFromDB.Id } }, 
       null) 

Это имело бы смысл, что вы хотели бы сделать это, чтобы убедиться, что нет никаких опасных строк вводили в страницу между <a> и </a> теги, но являются ли скрипты и такие исполняемые файлы между тегами привязки?

+0

Я столкнулся с этим сайтом после размещения вопроса и маркировки ответа, но я считаю, что он полезен другим, которые спотыкаются на этот вопрос: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –

ответ

6

Нет, поскольку в соответствии с this thread on SOHtmlAction.Link() уже HTML кодирует значения, поэтому в итоге вы делаете это дважды.

+0

Исправить; см. «GenerateLinkInternal» в HtmlHelper.cs в исходном коде MVC 2. –

-1

Да, абсолютно. Как правило, для любого HTML, который вы собираетесь вывести, который был первоначально получен из ненадежного источника, если предположить, что формат уже не был HTML (и достаточно проверен), вы всегда должны кодировать HTML-код для защиты от инъекционных атак.

+0

Нет. См. Http://stackoverflow.com/questions/2283920/should-html-encode-be-called-when-building-actionlinks-in-asp-net-mvc/2284022#2284022 – bzlm

0

Это, безусловно, хорошая идея, но вы, вероятно, должны помешать пользователям входить в потенциально злонамеренные строки в качестве своего имени.

+0

ASP.NET MVC имеет функцию который проверяет все входные данные, чтобы увидеть, пытаетесь ли вы вводить скрипт или вредоносный текст, так что это уже на месте. –

+0

Я вообще согласен, но имейте в виду, что «потенциально злонамеренный» сильно зависит от того, где будут отображаться данные _displayed_. Например, «» не повредит при отображении на бумажном отчете или необработанном отчете БД, это только проблема при отображении в HTML. Таким образом, в конечном итоге задача слоя _представления_ форматировать данные в соответствии с его конкретными потребностями. –