Der einzige Weg, um sicherstellen dass ein HTML-Markup kein JavaScript enthält, besteht darin, alle unsicheren HTML-Tags und -Attribute herauszufiltern, um zu verhindern, dass Cross-Site-Scripting (XSS).
Im Allgemeinen gibt es jedoch keine zuverlässige Methode, um ausdrückliches Entfernen alle unsicheren Elemente und Attribute nach ihren Namen zu benennen, da bestimmte Browser möglicherweise Elemente interpretieren, die Ihnen zum Zeitpunkt des Entwurfs gar nicht bekannt waren, und so eine Sicherheitslücke für böswillige Benutzer öffnen. Aus diesem Grund ist es viel besser, wenn Sie eine Whitelisting Ansatz als ein Schwarze Liste ein. Das heißt, dass Sie nur HTML-Tags zulassen, die Sie sicher sicher sind, und alle anderen standardmäßig entfernt werden. Tatsächlich kann nur ein einziger versehentlich zugelassener Tag Ihre Website für XSS anfällig machen.
Whitelisting (guter Ansatz)
Siehe diesen Artikel auf HTML-Sanitisierung die einige konkrete Beispiele dafür enthält, warum Sie eher eine Whitelist als eine Blacklist erstellen sollten. Zitat von dieser Seite:
Hier ist eine unvollständige Liste potenziell gefährlicher HTML-Tags und -Attribute:
script
die ein bösartiges Skript enthalten können
applet
, embed
y object
die automatisch bösartigen Code herunterladen und ausführen können
meta
die bösartige Weiterleitungen enthalten können
onload
, onunload
und alle anderen on*
Attribute, die bösartige Skripte enthalten können
style
, link
und die style
Attribut, das bösartige Skripte enthalten kann
Ici ist eine weitere hilfreiche Seite, die eine Reihe von HTML-Tags und -Attributen sowie CSS-Attributen vorschlägt, die in der Regel gefahrlos zugelassen werden können, sowie empfohlene Verfahren.
Schwarze Listen (generell schlechter Ansatz)
Obwohl viele Websites in der Vergangenheit (und auch heute noch) den Ansatz der schwarzen Listen verwenden, besteht fast nie ein echter Bedarf dafür. (Die Sicherheitsrisiken wiegen immer schwerer als die potenziellen Einschränkungen, die das Whitelisting bei den Formatierungsmöglichkeiten, die dem Benutzer gewährt werden, mit sich bringt). Sie müssen sich der Schwächen dieser Methode bewusst sein.
Zum Beispiel, diese Seite enthält eine Liste mit angeblich "allen" HTML-Tags, die Sie entfernen möchten. Wenn Sie die Liste nur kurz betrachten, werden Sie feststellen, dass sie nur eine sehr begrenzte Anzahl von Elementnamen enthält; ein Browser könnte leicht ein proprietäres Tag einfügen, das unwissentlich die Ausführung von Skripten auf Ihrer Seite ermöglicht, was im Grunde das Hauptproblem beim Blacklisting ist.
Schließlich würde ich Ihnen dringend empfehlen, ein HTML-DOM-Bibliothek (wie zum Beispiel das bekannte HTML-Beweglichkeitspaket ) für .NET zu verwenden, im Gegensatz zu RegEx, um die Bereinigung/Whitelisting durchzuführen, da dies wesentlich zuverlässiger ist. (Es ist durchaus möglich, ziemlich verrücktes, verschleiertes HTML zu erstellen, das Regexe täuschen kann! Ein ordentlicher HTML-Reader/Writer macht die Kodierung des Systems auf jeden Fall viel einfacher).
Das sollte Ihnen hoffentlich einen guten Überblick darüber geben, was Sie entwerfen müssen, um XSS vollständig (oder zumindest maximal) zu verhindern, und wie wichtig es ist, dass die HTML-Sanitisierung unter Berücksichtigung des unbekannten Faktors durchgeführt wird.