Санитарная обработка HTML - плохая разметка? - PullRequest
4 голосов
/ 05 января 2009

Я сканировал некоторые из обсуждений по очистке строк разметки HTML для повторного отображения на странице (например, комментарии блога) В прошлом я только в одностороннем порядке избежал разметки для повторного отображения.

Кто-нибудь знает, есть ли какие-либо решения, выходящие за рамки простого удаления «небезопасных» тегов?

Что если разметка недействительна? Например, как вы можете помешать и раскрыть тег жирным шрифтом напротив всего текста, который следует за ним на странице? Похоже, Stackoverflow справляется с этим.

Пример незамкнутого тега 'b'

Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 января 2009

Stackoverflow использует текстиль или что-то очень похожее.

Текстиль более или менее гарантированно выплевывает действительный (x) HTML, что устраняет многие типичные проблемы с дезинфекцией пользовательского ввода.

0 голосов
/ 25 сентября 2015

Пакет Html Agility , вероятно, является хорошей отправной точкой, поскольку утверждает, что он очень терпим к плохо отформатированному и искаженному HTML. Кроме того, вы можете захотеть создать некоторые правила для дальнейшей очистки. В конце вы сериализуете полученный DOM обратно в обычный HTML-код.

Я столкнулся с той же проблемой, что и вы, и построил такое HTML-дезинфицирующее средство на основе правил поверх Html Agility Pack. Это позволяет выравнивать или удалять теги, преобразовывать теги, например, заменяя b на strong теги и ограничивать использование атрибутов. Посмотрите на исходный код HtmlRuleSanitizer для идей или просто получите пакет NuGet , если вы хотите, чтобы это было сделано быстро.

0 голосов
/ 06 января 2009

Проверьте этот код:

Очистить HTML , я думаю, что StackOverflow где-то его использует ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...