Подтвердить что ты не робот

Bind() или Eval() автоматически HtmlEncode для защиты от XSS?

Простите меня, если это глупый вопрос. Я не смог найти ответ, указанный явно.

Я редко использую Bind() или Eval() на моих страницах aspx и вместо этого использую следующий синтаксис: (Предположим, что это находится в ItemTemplate в элементе управления Repeater)

<asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %>

Я начал делать это давным-давно и просто никогда не спрашивал об этом, но теперь мне приходит в голову, что это может быть излишним. И теперь я использую CMS, который использует этот синтаксис повсюду:

<asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>

Итак, мне интересно, в основном, если я использую Bind() или Eval(), автоматически ли выполняется время выполнения HtmlEncode для вывода? Я все время делал ненужную кодировку?

4b9b3361

Ответ 1

Bind() и Eval() НЕ делают ничего, чтобы предотвратить этот тип вещи и не кодировать. Также не блокируется код стиля <%# %>.

Однако, если вы используете ASP.NET 4 и более поздние версии, вы можете использовать <%: %> Blocks для обработки этого для ситуаций типа записи ответа и <%#: %> для ситуаций привязки данных.

Скотт Гатри имеет отличный пост об этом.