2010-09-28 2 views
1

(уточнение: это старый вопрос, который был переделан для целей администратора)Обнаружение HTML в ASP.NET

Там было немало вопросов, на этом сайте о разборе HTML из прокручиваемых и этажерок, или нет позволяя HTML в текстовых блоках. Мой вопрос аналогичен: как бы определить, присутствует ли HTML в текстовом поле? Должен ли я запускать его через регулярное выражение всех известных тегов HTML? Есть ли текущая библиотека для .NET, которая имеет возможность обнаруживать, когда HTML вставлен в Textarea?

Редактировать: Аналогично, есть ли библиотека JavaScript, которая делает это?

Редактировать # 2: Из-за того, как работает веб-приложение (он проверяет текст textarea на асинхронной обратной передаче с использованием метода Validate ASP.NET), он бомбит, прежде чем он сможет вернуться к кодировке для использования HTML .Encode. Моя забота заключалась в том, чтобы найти другой способ обработки HTML в этих случаях.

ответ

2

Да, регулярное выражение, вероятно, самый простой способ сделать это.

Одно регулярное выражение будет: <([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>

Вы можете запустить, что и в ASP.Net и JavaScript. Используемый класс инфраструктуры .Net: System.Text.RegularExpressions.Regex

Надеюсь, что это поможет!

+1

Этого недостаточно для обнаружения тегов вообще и может быть обмануто многими вариантами разметки. Если вы попытаетесь «стричь теги» в качестве меры безопасности (а вы не должны, это обречено на провал), вам нужно будет гораздо более строго. – bobince

0

Ну, в HTML вы не можете многое сделать без символа «<».

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

Я не думаю, что вам нужно искать определенные теги, поскольку HTML будет игнорировать недопустимые теги как часть спецификации, и это все равно будет считаться HTML.

EDIT: Ой! Почти забыл ... характер амперсанда! Если вы видите текст в тексте, вы можете иметь HTML-код, так как он используется для указания специальных символов (например, для ©). Это может быть опасно, поскольку пользователь может указать &lt; для <, чтобы он мог впоследствии превратиться в HTML ...

4

Не совсем ответ, но зачем вам это вообще нужно? Вы должны дезинформировать ввод HTML только в том случае, если вы собираетесь выводить его без изменений, т. Е. Если вы хотите, чтобы ваши пользователи действительно могли использовать HTML. И если вы этого хотите, вам не нужно «обнаруживать» HTML, вам просто нужно убедиться, что вы справляетесь с этим безопасно. Для этого у Джеффа Этвуда есть routine.

Если вы хотите предотвратить на выходе HTML, вы можете принимать любые входные данные пользователя без каких-либо проверок. Просто позаботьтесь о HtmlEncode и сохраните его таким образом. Тогда на вашем выходе не будет фактически никакого «реального» HTML из того, что написал пользователь.

1

Насколько я знаю, вы не можете вставлять HTML в TextArea и работать автоматически, по крайней мере, в .Net 2.0. ASP.Net автоматически обрабатывает ввод. Вам нужно установить директиву ValidateInput на false (если я правильно помню).

Если вы хотите разрешить HTML-теги и хотите выбрать из списка возможных тегов, я предлагаю вам найти «Markdown» и this Jeff Atwood Post.

2
bool containsHtml = Regex.IsMatch(MyTextbox.Text, @"<(.|\n)*?>"); 
1

+1 Солнечно.«Обнаружение» HTML - это безумное поручение. Вам нужно избегать его на выходе, и пока вы делаете это, вы в безопасности. Если вы не ускользаете от него, санитационные хаки не сделают вас безопасными, они просто собираются запутать проблему.

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

Да, вы хотите прекратить делать это. «Проверка запроса» ASP.NET является полностью фиктивной и ее необходимо отключить, если вы хотите иметь возможность обрабатывать загруженный контент последовательно.

Смежные вопросы