Как обращаться с закодированными входами, которые нужно редактировать? - PullRequest
0 голосов
/ 28 ноября 2008

Используя Microsoft AntiXssLibrary, как вы обрабатываете ввод, который необходимо отредактировать позже?

Например:

Пользователь вводит: <i>title</i>

Сохранено в базе данных как: <i>title</i>

На странице редактирования в текстовом поле отображается что-то вроде: &lt;i&gt;title&lt;/i&gt; потому что я кодировал его перед отображением в текстовом поле.

Пользователю это не нравится.

Можно ли не кодировать при записи в элемент управления вводом?

Обновление:

Я все еще пытаюсь понять это. Ответы ниже, кажется, говорят, чтобы декодировать строку перед отображением, но разве это не допускает атаки XSS?

Один пользователь, который сказал, что декодирование строки в значении поля ввода в порядке, был отклонен.

Ответы [ 5 ]

2 голосов
/ 15 мая 2009

Похоже, вы кодируете его более одного раза. В ASP.NET с помощью библиотеки Microsoft AntiXss вы можете использовать метод HtmlAttributeEncode для кодирования ненадежного ввода:

<input type="text" value="<%= AntiXss.HtmlAttributeEncode("<i>title</i>") %>" />

Это приводит к

<input type="text" value="&#38;&#35;60&#59;i&#38;&#35;62&#59;title&#38;&#35;60&#59;&#38;&#35;47&#59;i&#38;&#35;62&#59;" />
в разметке отображаемой страницы и правильно отображается как <i>title</i> в поле ввода.
1 голос
/ 28 ноября 2008

Ваша проблема в двойной кодировке; HTML-код необходимо экранировать один раз (чтобы его можно было без проблем вставить в HTML-код на странице), но дважды это приводит к буквальному появлению закодированной версии.

0 голосов
/ 10 июля 2009

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

Использование AntiXss предотвращает атаки путем преобразования сценария и разметки в текст. Он не делает ничего для «очистки» разметки, которая будет отображаться напрямую. Вам потребуется вручную удалить теги сценария и т. Д. Из пользовательского ввода, чтобы обеспечить полную защиту в этом сценарии.

Вам нужно будет удалить теги сценариев, а также атрибуты JavaScript на допустимых элементах. Например, злоумышленник может внедрить вредоносный код в атрибуты onclick или onmouseover.

0 голосов
/ 28 ноября 2008

Вы можете вызвать HTTPUtility.HTMLDecode (MyString), чтобы вернуть текст в незашифрованную форму.

0 голосов
/ 28 ноября 2008

Да, код внутри полей ввода защищен от атак сценариев и не нуждается в кодировании.

...