¿Qué tan seguro es aceptar un conjunto predefinido de etiquetas HTML no dañinas de una solicitud?

Una de las primeras cosas que aprendí como desarrollador web fue que nunca aceptaba ningún HTML del cliente. (Quizás solo si lo codifico en HTML).
Yo uso un editor WYSIWYG (TinyMCE) que genera HTML. Hasta ahora solo lo he usado en una página de administración, pero ahora me gustaría usarlo también en un foro. Tiene un módulo BBCode, pero parece estar incompleto. (Es posible que BBCode en sí no sea compatible con todo lo que quiero).

Entonces, aquí está mi idea:

Permito que el cliente publique directamente algún código HTML. Luego, verifico el código de cordura (bien formado) y elimine todas las etiquetas, atributos y reglas CSS que no están permitidos en función de un conjunto predefinido de etiquetas y estilos permitidos.
Obviamente, permitiría las cosas que el subconjunto de funcionalidades de TinyMCE puede generar.

Permitiría las siguientes etiquetas:
span, sub, sup, a, p, ul, ol, li, img, strong, em, br

Con los siguientes atributos:
style (para todo),href ytitle (paraa),alt ysrc (paraimg)

Y las siguientes reglas CSS:
color, font, font-size, font-weight, font-style, text-decoration

Estos cubren todo lo que necesito para formatear y (que yo sepa) no presentan ningún riesgo de seguridad. Básicamente, la aplicación de una buena formabilidad y la falta de estilos de diseño evitan que cualquiera dañe el diseño del sitio. El rechazo de la etiqueta del script y los me gusta evitan XSS.
(Una excepción: tal vez debería permitirwidth/height en un rango predefinido para imágenes).

Otra ventaja: esto me salvaría de la necesidad de escribir / buscar un convertidor BBCode-Html.

¿Qué piensas?
¿Es esto algo seguro?

(Como veo, StackOverflow también permite un poco de HTML básico en el campo "Acerca de mí", así que creo que no soy el primero en implementar esto).

EDITAR:

encontréesta respuesta que explica cómo hacer esto con bastante facilidad.
Y por supuesto,nadie debería pensar en usar expresiones regulares para esto.

La pregunta en sí no está relacionada con ningún lenguaje o tecnología, pero si se lo pregunta, escribo esta aplicación en ASP.NET.

Respuestas a la pregunta(3)

Su respuesta a la pregunta