2016-05-05 5 views
0

Ich schreibe ASP.NET MVC App. Einige HTML-Teile stammen von Benutzern und einige von Drittanbietern. Ist es einfach und schnell genug, HTML ohne schwere Artillerie wie HAP (Html ​​Agility Pack) oder Tidy zu säubern?Raw HTML von schädlichen Daten in C#

Ich bin brauchen nur Skripte, Stile zu entfernen, <object>/<embed>, href="javascript:", style=, onclick und ich denke nicht, dass sie manuell über .Remove/.replace Entfernung ein guter Weg ist auch mit Stringbuilder.

Im Beispiel, wenn ich nächste Eingabe

<html> 
    <style src="http://harmyourpage.com"/> 
    <script src="http://killyourdog.com"/> 
    <div> 
     <a href="http://co.com">Good link</a> 
     <a href="javascript::harm()">Bad link</a> 
     <p>Some text <b>to</b> test</p><br/> 
     <h1 style="position:absolute;">Damage your layout</h1> 
     And an image there <img src="http://co.com/a.jpg"/><br> 
     <span onclick="harm()">Good span with bad attribute</span> 
     <object>Your lovely java can be there</object> 
    </div> 
</html> 

, die in der nächsten umgerechnet werden müssen:

<div> 
    <a href="http://co.com">Good link</a> 
    <a>Bad link</a> 
    <p>Some text <b>to</b> test</p><br/> 
    <h1>Damage your layout</h1> 
    And an image there <img src="http://co.com/a.jpg"/><br> 
    <span>Good span with bad attribute</span> 
</div> 

So, wie dies zu tun - mit weißer Liste von Tags und anttributes - in der richtigen Art und Weise ?

UPD: Ich habe versucht, StackExchange HtmlHelpers Bibliothek, aber es entfernt benötigte Tags wie div, a und img.

+1

verwenden Warum Sie HTML aus Benutzereingaben erlauben es auf jeden Fall? –

+1

Möglicherweise möchten Sie die Endbenutzer-HTML-Eingabe verbieten und entweder eine Markdown-Sprache oder eine Art von Codierung verwenden, nicht nur eine reine Eingabe. – drz

Antwort

0

schnellste Weg, um das gleiche zu erreichen, ist für reguläre Ausdrücke verwenden

var regex = new Regex(
    "(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)|(\\<object(.+?)\\</object\\>)", 
    RegexOptions.Singleline | RegexOptions.IgnoreCase 
); 

string ouput = regex.Replace(input, ""); 

Sie können auch Microsoft Web Protection Library (http://wpl.codeplex.com/) für gleiche wie

Sanitizer.GetSafeHtmlFragment(input);