Encoder.HtmlEncode кодирует символы фарси
Я хочу использовать библиотеку Microsoft AntiXss для своего проекта. Когда я использую Microsoft.Security.Application.Encoder.HtmlEncode(str)
Функция, позволяющая безопасно отображать некоторые значения на моей веб-странице, она кодирует символы фарси, которые я считаю безопасными. Например, он преобразует لیست
в لیست
, Я использую неправильную функцию? Как я могу быть в состоянии безопасно распечатать вводимые пользователем данные на моей странице?
Я в настоящее время использую это так:
<h2>@Encoder.HtmlEncode(ViewBag.UserInput)</h2>
2 ответа
Я думаю, что я испортил! Razor view кодирует значения, если вы не используете @Html.Raw
право? Ну, я закодировал строку, и она закодировала ее снова. Так что, в конце концов, он просто был дважды закодирован и, следовательно, странно выглядят символы (значения Unicode)!
Если ваша кодировка (давайте предположим, что это Unicode
по умолчанию) поддерживает Farsi
это безопасно использовать Farsi
без каких-либо дополнительных усилий, в ASP.NET MVC
почти всегда.
Прежде всего, escape-on-input просто неправильный - вы взяли какой-то ввод и применили какое-то преобразование, которое совершенно не имеет отношения к этим данным. Как правило, неправильно кодировать ваши данные сразу же после их получения от пользователя. Вы должны хранить данные в чистом виде в своей базе данных и кодировать их только тогда, когда вы отображаете их пользователю и в соответствии с возможными уязвимостями для текущей системы. Например, "опасные" html-символы не являются "опасными" для SQL, android и т. Д., И это одна из основных причин, по которой вам не следует кодировать данные при их хранении на сервере. И еще одна причина - когда вы html кодируете строку, вы получаете в 6-7 раз больше символов для вашей строки. Это может быть проблемой с серверными ограничениями для длины строк. Когда вы сохраняете данные на сервере sql, вы должны избегать, проверять, очищать данные только для них и предотвращать только их уязвимости (например, внедрение SQL).
Теперь для ASP.NET MVC и бритвы вам не нужно html-кодирование ваших строк, потому что это делается по умолчанию, если вы не используете Html.Raw(), но, как правило, вы должны избегать этого (или html-кодирование, когда вы его используете). Также, если вы дважды закодируете свои данные, вы получите искаженный вывод:)
Надеюсь, это поможет очистить ваш разум.