Мы разрабатываем приложение, которое принимает пользовательский ввод в виде HTML-кода и отображает тот же HTML-код в качестве вывода на другой странице. И вход никогда не должен иметь какого-либо динамического поведения, такого как теги скрипта.
Мы Html кодируем значение в Javascript и сохраняем закодированное значение в БД. Мы Html декодируем сохраненное значение и отображаем его на новой странице, чтобы получить ожидаемый результат (см. Пример ниже).
Из того, что я прочитал до сих пор, я должен кодировать ввод с помощью Html, прежде чем отображать его как вывод на другой странице. Проблема, с которой я сталкиваюсь, заключается в том, что любой HTML-код, добавленный пользователем, отображается одинаково на новой странице.
Пример:
Ввод данных пользователем:
<div><h2>Header</h2><p>this is the body text</p></div>
Вывод на новой странице, когда Html кодируется и назначается другому элементу div:
<div><h2>Header</h2><p>this is the body text</p></div>
Ожидается:
Header
this is the body text
Единственный способ, которым я смог добиться ожидаемого результата, - это когда я Html декодировал сохраненное значение и присвоил его другому элементу управления контейнером.
Я что-то упустил, я перепробовал все известные мне способы Html-кодирования пользовательского ввода и его обратного рендеринга не дает ожидаемого результата. Любая идея о том, как этого добиться?
Если нет другого решения, есть ли в .net какая-либо структура проверки, позволяющая избежать XSS-атак. Я прошел через инфраструктуру AntiXSS от Microsoft, они больше предназначены для удаления любого вредоносного html и кодирования. Они не помогают сообщить пользователю, что он не должен вводить некоторые теги.
Спасибо за любую помощь заранее.