При кодировании ввода HTML в целях безопасности, как избежать кодирования международных символов, таких как Ñ или ñ? - PullRequest
5 голосов
/ 04 марта 2009

У меня есть текстовое поле в приложении ASP.NET MVC, где пользователь может набирать текст. Когда я показываю текст пользователю, я использую Html.Encode для предотвращения злонамеренного ввода. Проблема в том, что пользователь может печатать на испанском, и, возможно, он набирает año, а Encode преобразует это в a&#241o Как я могу предотвратить это?

РЕДАКТИРОВАТЬ: В сгенерированном HTML, я вижу это:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a>

Позже на странице у меня есть это, и на этот раз дисплей правильный:

<b>a1 'a1' Cama&#241;o</b>

Первый генерируется следующим образом:

<%= Html.RouteLink(Html.Encode(Model.NAME),  ...... %>

а второй вот так:

<%= Html.Encode(Model.NAME)%>

Так что я думаю, что проблема в Html.RouteLink.

Ответы [ 2 ]

5 голосов
/ 04 марта 2009

Вы кодируете дважды случайно?

Например, если вы установите программный контент Textarea на стороне сервера, он будет автоматически кодировать контент при рендеринге.

Попробуйте посмотреть необработанный вывод HTML текстовой области.

Обычно, когда вы помещаете escape-символы в содержимое текстовой области, оно должно отображаться в декодированной текстовой области (отображается как предполагаемый символ без экранирования).

Так что это может быть проблемой случайного HTML.Кодировать дважды без необходимости.

Если ваши данные уже экранированы, вы можете отменить экранирование (Html.Decode) перед тем, как поместить их в текстовую область.

2 голосов
/ 04 марта 2009

Так что я думаю, что проблема в Html.RouteLink

Да. Вы не должны HTML-кодировать параметр, входящий в RouteLink, он генерирует сам HTML и поэтому позаботится о его экранировании.

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