6 Stimmen

.NET HTML-Whitelisting (anti-xss/Cross Site Scripting)

Ich habe die häufige Situation, wo ich Benutzereingabe, die eine Teilmenge von HTML (Eingabe mit tinyMCE) verwendet haben. Ich brauche einen serverseitigen Schutz gegen XSS-Angriffe und bin auf der Suche nach einem gut getesteten Tool, das Menschen verwenden, um dies zu tun. Auf der PHP-Seite sehe ich viele Bibliotheken wie HTMLPurifier, die diese Aufgabe erfüllen, aber ich kann scheinbar nichts in .NET finden.

Ich bin im Grunde auf der Suche nach einer Bibliothek zu filtern, um eine Whitelist von Tags, Attribute auf diese Tags, und tut das Richtige mit "schwierigen" Attribute wie a:href und img:src

Ich habe den Beitrag von Jeff Atwood auf http://refactormycode.com/codes/333-sanitize-html aber ich weiß nicht, wie aktuell sie ist. Hat es irgendeinen Bezug zu dem, was die Website derzeit verwendet? Und auf jeden Fall bin ich mir nicht sicher, ob ich mit dieser Strategie, gültige Eingaben mit regexp herauszufiltern, zufrieden bin.

In diesem Blogbeitrag wird eine viel überzeugendere Strategie vorgestellt:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

Bei dieser Methode wird das HTML tatsächlich in ein DOM geparst, dieses validiert und dann gültiges HTML daraus neu aufgebaut. Wenn das HTML-Parsing vernünftig mit fehlerhaftem HTML umgehen kann, dann ist das großartig. Wenn nicht, kein Problem - ich kann wohlgeformtes HTML verlangen, da die Benutzer den tinyMCE-Editor verwenden sollten. In jedem Fall schreibe ich um, was ich als sicheres, wohlgeformtes HTML kenne.

Das Problem ist, dass dies nur eine Beschreibung ist, ohne einen Link zu einer Bibliothek, die diesen Algorithmus tatsächlich ausführt.

Gibt es eine solche Bibliothek? Wenn nicht, was wäre eine gute .NET HTML-Parsing-Engine? Und welche regulären Ausdrücke sollten verwendet werden, um eine zusätzliche Validierung a:href, img:src durchzuführen? Übersehe ich hier noch etwas Wichtiges?

Ich möchte hier kein Buggy-Rad neu implementieren. Sicherlich gibt es da draußen einige häufig verwendete Bibliotheken. Irgendwelche Ideen?

6voto

Julian Punkte 29732

Wir verwenden die HtmlSanitizer .Net-Bibliothek, die:

Auch auf NuGet

3voto

Tommy Carlier Punkte 7563

Microsoft verfügt über eine Open-Source-Bibliothek zum Schutz vor XSS: AntiXSS .

3voto

blowdart Punkte 53842

Nun, wenn Sie parsen wollen, und Sie sind besorgt über ungültige (x)HTML kommen in dann die HTML-Beweglichkeitspaket ist wahrscheinlich die beste Lösung für das Parsing. Denken Sie jedoch daran, dass nicht nur Elemente, sondern auch Attribute von erlaubten Elementen zugelassen werden müssen (natürlich sollten Sie eine Whitelist der erlaubten Elemente und ihrer Attribute erstellen, anstatt zu versuchen, Dinge, die fragwürdig sein könnten, über eine Blacklist zu entfernen)

Außerdem gibt es die OWASP AntiSamy Projekt die noch in Arbeit ist - haben sie auch eine Testgelände können Sie versuchen, XSS

Regex für dies ist wahrscheinlich zu riskant IMO.

2voto

Jason Beck Punkte 1042

http://www.microsoft.com/en-us/download/details.aspx?id=28589 Sie können eine Version hier herunterladen, aber ich habe sie wegen der nützlichen DOCX-Datei verlinkt. Meine bevorzugte Methode ist, den NuGet-Paketmanager zu verwenden, um das neueste AntiXSS-Paket zu erhalten.

Sie können die HtmlSanitizationLibrary Assembly verwenden, die in der 4.x AntiXss Bibliothek zu finden ist. Beachten Sie, dass GetSafeHtml() in der HtmlSanitizationLibrary unter Microsoft.Security.Application.Sanitizer zu finden ist.

1voto

Ich hatte genau das gleiche Problem vor ein paar Jahren, als ich TinyMCE verwendete.

Es scheint immer noch keine anständigen XSS/HTML-Whitelisting-Lösungen für .Net zu geben, also habe ich eine Lösung hochgeladen, die ich erstellt habe und seit ein paar Jahren verwende.

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

Die Definition der weißen Liste basiert auf TinyMCEs valid-elements.

Take Two: Wenn man sich umschaut, hat Microsoft kürzlich eine auf einer weißen Liste basierende Anti-XSS-Bibliothek (V3.0) veröffentlicht, die man sich ansehen sollte:

Die Microsoft Anti-Cross-Seite Scripting-Bibliothek V3.0 (Anti-XSS V3.0) ist eine Kodierungsbibliothek, die dazu dient Entwickler beim Schutz ihrer ASP.NET webbasierten Anwendungen vor XSS Angriffen zu schützen. Sie unterscheidet sich von den meisten Kodierungs Bibliotheken dadurch, dass sie die White-Listing-Technik - manchmal manchmal auch als Prinzip der Einschlüsse bezeichnet wird - zum Schutz gegen XSS-Angriffe bietet. Dieser Ansatz funktioniert, indem zunächst eine gültige oder zulässige Menge von Zeichen definiert und kodiert alles außerhalb dieser Menge (ungültige Zeichen oder potenzielle Angriffe). Der White-Listing-Ansatz bietet mehrere Vorteile gegenüber anderen Kodierungsverfahren. Neue Funktionen in dieser Version der Microsoft Anti-Cross Site Scripting Library umfassen: - Eine erweiterte Whitelist, die mehr Sprachen unterstützt Sprachen unterstützt - Leistungsverbesserungen - Leistungsdatenblätter (in der Online-Hilfe) Hilfe) - Unterstützung für Shift_JIS-Kodierung für mobile Browser - Ein Beispiel Anwendung - Security Runtime Engine (SRE) HTTP-Modul

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X