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

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

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

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

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

13.10.2009 13:06:12
На каком сервере / языке вы работаете? PHP, ASP.NET, ...?
mauris 13.10.2009 13:09:39
@Marius - извините, отредактированные теги были более точными.
Mark Carpenter 13.10.2009 14:50:37
7 ОТВЕТОВ

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

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

1
23.05.2017 12:11:21

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

0
13.10.2009 13:15:44

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

0
23.05.2017 12:19:37

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

1
13.10.2009 15:13:40
РЕШЕНИЕ

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

0
3.11.2009 03:13:33
txtStore.Text=Regex.Replace(txtStore, "<.*?>", string.Empty);
0
17.09.2013 07:43:30

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

JQuery-Удаление сценария-теги-из-строки

0
7.09.2014 07:27:35