ASP.NET MVC Vorbei Raw HTML von Controller zu View
Ich habe meinen Kopf kratzen über diese für ein paar Tage, und ich bin nicht sicher, ob es ein Problem mit meiner Umgebung oder der code selbst stützt diese auf zu ASP.NET MVC (obwohl ich habe 5 Jahre Erfahrung in C#). Ich bin mit einer der letzten Neuinstallation von Win7x64 und VS 2008-mit allen patches.
Habe ich raw HTML gespeichert in einer Datenbank-Tabelle, die selektiv geladen, der controller basiert auf wenigen Regeln, die ich nicht mehr unter Kontrolle habe. Leider, wenn versuchen, was der Wert in einer Anzeige von Daten in der Kontrolle, wie Z:
ViewData["HTMLData"] = DAO.HTMLDataGet();
Wenn ich sehe die Ausgabe, es ist entkommen/HTML-Codiert werden. Ich habe versucht, über die alle, die nicht scheinen, um dieses Problem zu beheben:
<%: HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString())%>
...
<%: Server.HtmlDecode(ViewData["HTMLData"].ToString())%>
...
<%: Html.Raw(ViewData["HTMLData"].ToString())%>
...er schnappt sich den raw-HTML aus der Datenbank-Tabelle ganz gut, aber es hält Sie gezwungen, gestrahlt Codierung egal was ich versuche. Von was ich gelesen habe auf der MSDN-Website, es war ein Fuß Hinweis: über die Probleme, die von HTML nicht richtig dekodiert, die Leerzeichen enthalten (die Grube). Da ich bezweifle, dass ich der einzige bin, der hat sich diese Wende ich mich an Euch Leute für einige Ideen.
Ich bin zu Durcheinander, mein Weg, obwohl es mit einem regex in der Ansicht zu tun, Seite Aufräumen, dachte aber, es wäre besser, einige Ratschläge von einige andere Leute zuerst, bevor ich brute-force.Vielen Dank im Voraus.
Ich glaube, ich löste das Rätsel.. ich war mit <%: %> statt <%= %> -- die letztere das Problem behebt. Für Microsoft, das versucht, Dinge einfach zu machen, Sie haben eine Hölle der eine Menge dumme Entscheidungen mit ASP.Net wie diese und andere nutzlose pseudo-markup
Mit was??111Eleven
tatsächlich, Sie haben Recht: es war eine dumme Entscheidung, das war, dass Zitat
<%=
war die einzige, die verfügbar war, wenn <%:
ist die richtige - Verhalten (und wurde Hinzugefügt, viel später), und sollte verwendet werden, fast alle der Zeit. In razor, haben Sie es richtig: @foo
ist das gleiche wie <%:foo%>
, D. H. codiert ist. Wenn Sie denken, dass <%=
ist die vorzuziehen Verhalten, dann: Sie haben das nicht getan annähernd genug, html-Programmierung (nicht speziell ASP.NET), und denken nicht "xss" genug. Schreiben pre-formed html-Code (aus einer Sicht) ist die Ausnahme, nicht der Fall.InformationsquelleAutor Dave | 2012-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
<%:
bedeutet "Kodieren, wenn nötig". Wenn Sie nicht möchten, dass dann die faul Ansatz wäre, die Nutzung<%=
, aber ehrlich gesagt, ich schlage vor, Sie stattdessen wickeln Sie es inIHtmlString
zum Beispiel:Nun, wenn Sie speichern , dass und zeigen Sie, sollte Sie in die html - "wie es ist".
äh, warum? Nahezu jeder Ausgabe etwas, das richtig Sache ist, zu codieren. Denken Sie nun an, welche Auswirkungen es haben wird, wenn man es falsch: Doppel-encoding weit vorzuziehen (und weit mehr offensichtlich) als eine xss-exploit.
InformationsquelleAutor Marc Gravell
Versuchen Sie es mit: <%= %>
<%: %> ist die Syntax für die Ausgabe in HTML-Codierung ASP.NET 4 (und ASP.NET MVC)
Für Mehr Details
Wie HTML Codieren Inhalte Heute
ASP.NET Anwendungen (insbesondere diejenigen, die sich mit ASP.NET MVC) verlassen sich oft auf die Verwendung <%= %> code-nugget Ausdrücke, die die render-Ausgabe. Entwickler, die heute oft den Server.HtmlEncode() oder HttpUtility.Encode () - helper-Methoden, die innerhalb dieser Ausdrücke, die die HTML-Codierung der Ausgabe, bevor es gerendert wird.
Während dies funktioniert, es gibt zwei Nachteile:
Ist es etwas Ausführlicher
Entwickler Häufig vergessen, rufen Sie den Server.HtmlEncode-Methode – und es gibt keinen einfachen Weg, um sicherzustellen, dass die Nutzung über eine app
Neue <%: %> Codeteil Syntax
Mit ASP.NET 4 wir sind mit der Einführung eines neuen code-Ausdruck syntax (<%: %>), sodass die Ausgabe wie <%= %> Blöcke tun – aber was auch automatisch HTML kodiert es, vor so tun. Dadurch entfällt die Notwendigkeit, explizit die HTML-Codierung von Inhalten.
Wir haben die <%: %> syntax, so dass es leicht sein würde, um schnell ersetzen Sie die vorhandenen Instanzen von <%= %> code-Blöcke. Es ermöglicht Ihnen auch, auf einfache Weise durchsuchen Sie Ihre code-Basis für <%= %> - Elemente zu finden und zu überprüfen, auch dann, wenn Sie nicht mit HTML-Codierung in Ihrer Anwendung, um sicherzustellen, dass Sie haben das richtige Verhalten.
HtmlRaw
, dann spielt es keine Rolle, ob Sie<%:
vs<%=
, und damit die Präferenz wäre immer noch für<%:
. Wenn die erste Zeile war<%:Html.Raw(...)%>
dies wäre die perfekte Antwort auf die Frage.InformationsquelleAutor Kapil Khandelwal