2009-06-22 5 views
5
vorgeschlagen

In Podcast 58 (ca. 20 Minuten in), klagt Jeff über die Probleme der HTML.Encode() und Joel spricht über die Art System mit gewöhnlichen Strings und HTMLStrings haben:Verhindern XSS den Typ System beutet unter Verwendung als Joel

  • Eine kurze politische Tirade über das Böse der View-Engines, die HTML Codierung standardmäßig nicht. Das Problem mit dieser Design-Wahl ist, dass es nicht "sicher standardmäßig", die immer die falsche Wahl für ein Framework oder API ist. Vergessen Sie, ein wenig von Benutzer-eingegebenen Daten in einem einzigen stinkenden Ort in Ihrer Web-App zu kodieren, und werden Sie vollständig im Besitz von XSS sein. Glauben Sie es. Ich weiß, weil es uns passiert ist. Mehrmals!

  • Joel behauptet, dass mit einer stark typisierte Sprache und das Recht Rahmen, es möglich ist, (in der Theorie) vollständig XSS zu beseitigen - diese würde unter Verwendung eines spezifischen Daten Typ benötigen, einen Typ, der einzige ist Weg zu Daten an den Browser senden. Diese Daten Typ würde bei Kompilierung Zeit validiert werden.

Die Kommentare bei der Erwähnung Blog-Post statische Analyse mit potentiellen Schwächen zu finden. Die transcript Wiki ist noch nicht fertig.

Ist es möglich, Joels Vorschlag ohne ein neues ASP.NET-Framework zu implementieren?

Ist es möglich, es einfach zu implementieren, indem Sie jedes Steuerelement ableiten und neue Schnittstellen basierend auf HTMLString erzwingen? Wenn die meisten Leute bereits Steuerelemente unterklassifizieren, um ortsspezifische Funktionen besser injizieren zu können, wäre das nicht recht einfach zu implementieren?

Wäre es das wert, dies zu tun, anstatt in statische Analyse zu investieren?

Antwort

2

Um HtmlString überall zu verwenden, müssten Sie im Prinzip jede Eigenschaft und Methode jeder Websteuerung neu schreiben. System.String ist versiegelt, sodass Sie keine Unterklasse erstellen können.

Ein einfacherer (aber immer noch sehr zeitaufwendiger) Ansatz wäre die Verwendung von Steueradaptern, um Web-Steuerelemente durch sichere Alternativen zu ersetzen. In diesem Fall würden Sie jedes Websteuerelement ableiten und die Rendermethoden in HTML-codierten dynamischen Inhalt überschreiben.

+0

Ich denke, das ist mein Punkt. In vielen ASP.NET-Anwendungen, die ich verwendet habe, wurde JEDES Steuerelement bereits unterklassifiziert, da wir I18n und spezielle Erweiterungen für die Validierung und andere Dinge implementiert haben. –

Verwandte Themen