Quão seguro é aceitar um conjunto predefinido de tags HTML não prejudiciais de uma solicitação?

Uma das primeiras coisas que aprendi como desenvolvedor da Web foi nunca aceitar nenhum HTML do cliente. (Talvez apenas se eu o codificar em HTML.)
Eu uso um editor WYSIWYG (TinyMCE) que gera HTML. Até agora, eu o usei apenas em uma página de administrador, mas agora eu também gostaria de usá-lo em um fórum. Possui um módulo BBCode, mas isso parece estar incompleto. (É possível que o próprio BBCode não suporte tudo o que eu quero.)

Então, aqui está a minha ideia:

Eu permito que o cliente POSTE diretamente algum código HTML. Depois, verifico o código quanto à sanidade (boa formação) e remova todas as tags, atributos e regras CSS que não são permitidas, com base em um conjunto predefinido de tags e estilos permitidos.
Obviamente, eu permitiria o material que pode ser produzido pelo subconjunto da funcionalidade TinyMCE que eu uso.

Eu permitiria as seguintes tags:
span, sub, sup, a, p, ul, ol, li, img, strong, em, br

Com os seguintes atributos:
style (para tudo),href etitle (paraa),alt esrc (paraimg)

E as seguintes regras CSS:
color, font, font-size, font-weight, font-style, text-decoration

Elas abrangem tudo o que eu preciso para formatar e (até onde eu sei) não apresenta nenhum risco à segurança. Basicamente, a imposição de boa formação e a falta de estilos de layout impedem que alguém prejudique o layout do site. A proibição da tag de script e os gostos impedem o XSS.
(Uma exceção: talvez eu deva permitirwidth/height em um intervalo predefinido para imagens.)

Outra vantagem: essas coisas me salvariam da necessidade de escrever / procurar um conversor BBCode-Html.

O que você acha?
Isso é uma coisa segura a se fazer?

(A meu ver, o StackOverflow também permite um pouco de HTML básico no campo "Sobre mim", então acho que não sou o primeiro a implementar isso.)

EDITAR:

eu encontreiesta resposta o que explica como fazer isso com bastante facilidade.
E claro,ninguém deve pensar em usar regex para isso.

A questão em si não está relacionada a nenhum idioma ou tecnologia, mas se você está se perguntando, eu escrevo esse aplicativo no ASP.NET.

questionAnswers(3)

yourAnswerToTheQuestion