Насколько безопасно принимать предопределенный набор неопасных тегов HTML из запроса?

Одна из первых вещей, которую я узнал как веб-разработчик, - никогда не принимать HTML-код от клиента. (Возможно, только если я закодирую HTML.)
Я использую редактор WYSIWYG (TinyMCE), который выводит HTML. До сих пор я использовал его только на странице администратора, но теперь я хотел бы также использовать его на форуме. У него есть модуль BBCode, но он кажется неполным. (Возможно, что сам BBCode не поддерживает все, что я хочу.)

Итак, вот моя идея:

Я разрешаю клиенту напрямую размещать HTML-код. Потом проверяю код на здравомыслие (хорошо сформированности) и удалите все теги, атрибуты и правила CSS, которые не разрешены, на основе предварительно определенного набора разрешенных тегов и стилей.
Очевидно, я бы позволил материал, который может быть выведен подмножеством функций TinyMCE, которые я использую.

Я бы позволил следующие теги:
span, sub, sup, a, p, ul, ol, li, img, strong, em, br

Со следующими атрибутами:
style (За все),href а такжеtitle (заa),alt а такжеsrc (заimg)

И следующие правила CSS:
color, font, font-size, font-weight, font-style, text-decoration

Они охватывают все, что мне нужно для форматирования, и (насколько я знаю) не представляют никакой угрозы безопасности. По сути, обеспечение правильной формы и отсутствие каких-либо стилей верстки не позволяют никому повредить макету сайта. Запрещение тега script и тому подобное предотвращают XSS.
(Одно исключение: может быть, мне следует разрешитьwidth/height в предопределенном диапазоне для изображений.)

Другое преимущество: этот материал избавил бы меня от необходимости писать / искать конвертер BBCode-Html.

Как вы думаете?
Это безопасная вещь?

(Как я вижу, StackOverflow также допускает некоторый базовый HTML-код в поле «О себе», поэтому я думаю, что я не первый, кто реализует это.)

РЕДАКТИРОВАТЬ:

я нашелэтот ответ который объясняет, как сделать это довольно легко.
И, конечно же,никто не должен думать об использовании регулярных выражений для этого.

Сам вопрос не связан с каким-либо языком или технологией, но если вам интересно, я пишу это приложение в ASP.NET.

Ответы на вопрос(3)

Ваш ответ на вопрос