Frage

Gibt es Probleme mit dem, was ich hier tue? Dies ist mein erstes Mal mit so etwas beschäftigen, und ich möchte nur sicherstellen, verstehe ich alle Risiken etc. zu verschiedenen Methoden.

Ich bin mit WMD Benutzereingaben zu bekommen, und ich bin die Anzeige mit einer wörtlichen Kontrolle. Da es nicht mehr bearbeitet einmal eingegeben werde ich die HTML und nicht die Abschriften werden Speichern

input = Server.HTMLEncode(stringThatComesFromWMDTextArea)

Und dann so etwas wie das folgende laufen für Tags Ich Nutzer wollen nutzen können.

// Unescape whitelisted tags.
string output = input.Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>")
                     .Replace("&lt;i&gt;", "<i>").Replace("&lt;/i&gt;", "</i>");

Bearbeiten Hier ist, was ich tue derzeit:

 public static string EncodeAndWhitelist(string html)
 {
     string[] whiteList = { "b", "i", "strong", "img", "ul", "li" };
     string encodedHTML = HttpUtility.HtmlEncode(html);
     foreach (string wl in whiteList)
         encodedHTML = encodedHTML.Replace("&lt;" + wl + "&gt;", "<" + wl + ">").Replace("&lt;/" + wl + "&gt;", "</" + wl + ">");
     return encodedHTML;
 }
  1. Will, was ich tue hier halten mich geschützt von XSS ?
  2. Gibt es andere Überlegungen die gemacht werden sollte?
  3. Gibt es eine gute Liste der normalen Tags zu Whitelist?
War es hilfreich?

Lösung

Wenn Ihre Anforderungen wirklich so grundlegend sind, dass Sie solche einfachen String-Ersatz tun kann, dann ja, dann ist dies eine ‚sichere‘ gegen XSS. (Allerdings ist es immer noch möglich, nicht-wohlgeformte Inhalte einreichen, wo <i> und <b> sind falsch verschachtelte oder nicht geschlossene, das könnte möglicherweise vermasselt die Seite die Inhalte Ende nach oben eingelegt in.)

Aber das ist selten genug. Zum Beispiel zur Zeit <a href="..."> oder <img src="..." /> sind nicht erlaubt. Wenn Sie diese oder andere Markup mit Attributwerten in ermöglichen wollte, dann würden Sie eine ganze Menge mehr Arbeit zu tun. Man könnte es dann nähern mit regex, aber das gibt Ihnen endlose Probleme mit zufälliger Verschachtelung und Ersatz von bereits ersetzt Inhalt, da, wie regex kann nicht Parsing HTML, und das.

beiden Probleme zu lösen, ist die übliche Vorgehensweise ist ein [X] [HT] ML-Parser auf dem Eingang zu verwenden, dann geht der DOM alle entfernen, aber bekannt-gute Elemente und Attribute, dann schließlich wieder serialise auf [X] HTML. Das Ergebnis wird dann garantiert wohlgeformt und enthält nur sicheren Inhalt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top