Wie sicher ist es, einen vordefinierten Satz nicht schädlicher HTML-Tags von einer Anfrage zu akzeptieren?

Eines der ersten Dinge, die ich als Webentwickler gelernt habe, war, niemals HTML vom Client zu akzeptieren. (Vielleicht nur, wenn ich es HTML kodiere.)
Ich verwende einen WYSIWYG-Editor (TinyMCE), der HTML ausgibt. Bisher habe ich es nur auf einer Admin-Seite verwendet, aber jetzt möchte ich es auch in einem Forum verwenden. Es hat ein BBCode-Modul, aber das scheint unvollständig zu sein. (Es ist möglich, dass BBCode selbst nicht alles unterstützt, was ich möchte.)

Also, hier ist meine Idee:

Ich erlaube dem Client, HTML-Code direkt zu veröffentlichen. Dann überprüfe ich den Code auf Vernunft Wohlgeformtheit) und entfernen Sie alle Tags, Attribute und CSS-Regeln, die auf der Grundlage eines vordefinierten Satzes zulässiger Tags und Stile nicht zulässig sind.
Offensichtlich würde ich zulassen, dass die Inhalte von der von mir verwendeten Teilmenge der TinyMCE-Funktionalität ausgegeben werden können.

Ich würde die folgenden Tags zulassen:
span, sub, sup, a, p, ul, ol, li, img, strong, em, br

Mit den folgenden Attributen:
style (für alles),href undtitle (zuma),alt undsrc (zumimg)

Und die folgenden CSS-Regeln:
color, font, font-size, font-weight, font-style, text-decoration

Diese decken alles ab, was ich zum Formatieren benötige, und stellen (soweit ich weiß) kein Sicherheitsrisiko dar. Grundsätzlich verhindern die Durchsetzung von Wohlgeformtheit und das Fehlen jeglicher Layoutstile, dass jemand das Layout der Site verletzt. Das Nichtzulassen des Script-Tags und ähnlicher Elemente verhindert XSS.
(Eine Ausnahme: Vielleicht sollte ich @ erlaubwidth/height in einem vordefinierten Bereich für Bilder.)

Weiterer Vorteil: dieses Zeug würde mich vor der Notwendigkeit bewahren, einen BBCode-Html-Konverter zu schreiben / zu suchen.

Was denkst du
Ist das eine sichere Sache?

(Wie ich sehe, erlaubt StackOverflow auch einige grundlegende HTML-Befehle im Feld "Über mich", so dass ich glaube, dass ich nicht der erste bin, der dies implementiert.)

BEARBEITEN

Ich fanddiese Antwort was erklärt, wie man das ziemlich einfach macht.
Und natürlich, niemand sollte darüber nachdenken, Regex für dieses @ zu verwend.

Die Frage selbst hat nichts mit Sprache oder Technologie zu tun, aber wenn Sie sich fragen, schreibe ich diese Anwendung in ASP.NET.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage