Каков наилучший способ удалить (или игнорировать) теги сценария и формы в HTML? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть текст, хранящийся в SQL как HTML. Я не гарантирую, что эти данные правильно сформированы, поскольку пользователи могут копировать / вставлять из любого места в используемый мной редакторский элемент управления или вручную редактировать созданный HTML-код.

Вопрос в том, как лучше всего удалить или как-то игнорировать теги <script/> и <form/>, чтобы при отображении текста пользователя в другом месте веб-приложения он не нарушал нормальную работу содержащая страница.

Я поиграл с идеей простого «Найти и заменить» для <script> / <form> с <div> (очевидно, с учетом пробелов и закрывающих тегов, если они существуют). Я также открыт для любого способа как-то «игнорировать» определенные теги. Насколько я знаю, может быть какой-то встроенный способ сказать (в HTML, CSS или JavaScript) «для всех элементов в <div id="MyContent">, трактовать <form> и <script> как <div>.

Любая помощь или совет будет принята с благодарностью!

Ответы [ 7 ]

1 голос
/ 13 октября 2009

Поскольку вы используете .Net, я бы порекомендовал HtmlAgilityPack, поскольку с ним легко работать и он хорошо работает с искаженным HTML.

1 голос
/ 13 октября 2009

С точки зрения очистки пользовательского ввода, теги формы и скрипта - не единственные, которые следует очистить.

Лучший способ сделать эту работу зависит от того, какие инструменты вы используете. Посмотрите на эти вопросы:

0 голосов
/ 07 сентября 2014

Я сталкивался с такой же проблемой раньше. Но мой сценарий был чем-то другим. Я добавлял контент с запросом ajax на страницу. Содержимое в ответе ajax содержало html, и оно также содержало теги сценария. Я просто хотел получить html без какого-либо сценария, поэтому я удалил все теги сценария из ответа ajax с помощью jquery.

JQuery-удалить-скрипт-теги-из-строки

0 голосов
/ 17 сентября 2013
txtStore.Text=Regex.Replace(txtStore, "<.*?>", string.Empty);
0 голосов
/ 03 ноября 2009

Хотя предложенные ответы были приемлемыми, я использовал старое доброе регулярное выражение для замены тегов начала и конца <script> и <form> на <div>.

0 голосов
/ 13 октября 2009

Не пытайтесь делать это самостоятельно - слишком много хитростей для того, чтобы добавить кусочки сценария и общую злобу на страницу. Используйте библиотеку Microsoft AntiXSS - в версии 3.1 встроена очистка HTML. Возможно, вам нужен метод GetSafeHTMLFragment, который возвращает очищенный фрагмент HTML. См. мой предыдущий ответ .

0 голосов
/ 13 октября 2009

Это зависит от того, какой язык вы используете. В общем, я бы рекомендовал использовать анализатор HTML, создать небольшой DOM из фрагмента, а затем убрать ненужные элементы. Существует много хороших HTML-парсеров, специально разработанных для работы с беспорядочным HTML-кодом. Примеры включают BeautifulSoup (Python), HTMLParser (Java) ... И, поскольку ответ пришел, когда я печатал, то, что сказал Колин!

...