2010-01-20 1 views
2

Я уверен, что это распространенный вопрос ...Безопасный HTML в элементах управления ASP.NET

Я хочу, чтобы пользователь мог ввести и форматировать описание.

Прямо сейчас у меня есть многострочное текстовое поле, в которое они могут вводить обычный текст. Было бы неплохо, если бы они могли сделать небольшое форматирование html. С этим я должен справиться? Разберите вход и только подтвердите, есть ли «безопасные» теги, например <ul><li><b> и т. Д.?

Я сохраняю это описание в SQL db. Чтобы правильно отобразить этот HTML-код, мне нужно использовать литерал на странице и просто сбрасывать его в нужную область или есть лучший контроль за тем, что я делаю?

Кроме того, есть ли свободное управление, подобное тому, которое находится на SO для ввода пользователем/незначительного редактирования?

ответ

4

Посмотрите на библиотеку AntiXSS. Текущая версия (3.1) имеет метод, называемый GetSafeHtmlFragment, который можно использовать для выполнения разбора, о котором вы говорите.

A Literal, вероятно, является правильным элементом управления для вывода этого HTML-кода, поскольку Literal просто выводит то, что помещается в него, и позволяет браузеру отображать любой HTML-код. Этикетки будут выводить всю разметку, включая теги.

Набор инструментов управления AJax имеет text editor.

4

Кроме того, есть свободный контроль как один на SO для пользовательского ввода/незначительные редактирования?

Stackoverflow использует the WMD control and markdown, как описано здесь:

http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/

+0

+1 Спасибо большое. – Jason

+0

Добро пожаловать. :) –

2

Вам нужно будет проверить, какие теги введены, чтобы избежать перекрестных атак со стороны сценариев и т.д. Вы можете использовать регулярные выражения, чтобы проверить, что любые теги на «белый список», который у вас есть, и вычеркнуть любые другие.

Вы можете проверить это link для получения списка редакторов расширенного текста.

0

В дополнение к другим ответам вам необходимо установить ValidateRequest = "false" в директиве @Page страницы, содержащей текстовое поле. Это отключает стандартную проверку ASP.NET, которая запрещает отправку HTML из текстового поля. Затем вы должны использовать свою собственную процедуру проверки, например, одну @PhilPursglove.