Wie kann ich einem Benutzer erlauben, mit ASP.net MVC HTML in ein bestimmtes Feld einzugeben?
Ich habe eine lange Form mit vielen Feldern, die diesem komplexen Objekt in der Steuerung zugeordnet werden.
Ich möchte, dass ein Feld (die Beschreibung) HTML zulässt, auf das ich zu einem späteren Zeitpunkt meine eigene Hygiene anwenden werde.
Antworten:
Fügen Sie dem Controller, für den Sie HTML zulassen möchten, das folgende Attribut der Aktion (Post) hinzu:
Edit: Wie pro Charlino Kommentare:
Stellen Sie in Ihrer web.config den verwendeten Validierungsmodus ein. Siehe MSDN :
Edit Sept 2014: Gemäß sprinter252 Kommentare:
Sie sollten jetzt das
[AllowHtml]
Attribut verwenden. Siehe unten von MSDN :quelle
<httpRuntime requestValidationMode="2.0" />
in Ihrer web.config-Datei festlegen.Was ist mit
[AllowHtml]
Attribut über Eigenschaft?quelle
MetadataTypeAttribute
und ist vorzuziehen, da nur HTML für die einzelnen Felder und nicht für das gesamte Objekt zulässig ist.Zum Modell hinzufügen:
Und zu Ihrem Eigentum
Dieser Code aus meiner Sicht am besten, um diesen Fehler zu vermeiden. Wenn Sie den HTML-Editor verwenden, treten keine Sicherheitsprobleme auf, da diese bereits eingeschränkt sind.
quelle
Das Hinzufügen
[AllowHtml]
der spezifischen Eigenschaft ist die empfohlene Lösung, da es zahlreiche Blogs und Kommentare gibt, die darauf hinweisen, die Sicherheitsstufe zu verringern, was inakzeptabel sein sollte.Durch Hinzufügen des MVC-Frameworks kann der Controller getroffen und der Code in diesem Controller ausgeführt werden.
Es hängt jedoch von Ihrem Code, Ihren Filtern usw. ab, wie die Antwort generiert wird und ob eine weitere Validierung vorliegt, die einen weiteren ähnlichen Fehler auslösen könnte.
In jedem Fall ist das Hinzufügen von
[AllowHtml]
Attributen die richtige Antwort, da HTML in der Steuerung deserialisiert werden kann. Beispiel in Ihrem Ansichtsmodell:quelle
Ich hatte das gleiche Problem, obwohl ich
[System.Web.Mvc.AllowHtml]
die betreffende Eigenschaft wie in einigen Antworten beschrieben ergänzt habe.In meinem Fall habe ich eine
UnhandledExceptionFilter
Klasse, die auf das Request-Objekt zugreift, bevor die MVC-Validierung stattfindet (und daher hat AllowHtml keine Auswirkung), und dieser Zugriff löst a aus[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
.Dies bedeutet, dass der Zugriff auf bestimmte Eigenschaften eines Request-Objekts implizit die Validierung auslöst (in meinem Fall ist es die
Params
Eigenschaft).Eine Lösung zur Verhinderung der Validierung ist in MSDN dokumentiert
Daher, wenn Sie Code wie diesen haben
ändere es auf
oder verwenden Sie einfach die
Form
Eigenschaft, die keine Validierung auszulösen scheintquelle
Wenn Sie eine HTML-Eingabe für den Parameter der Aktionsmethode zulassen müssen (im Gegensatz zu "Modelleigenschaft"), gibt es keine integrierte Möglichkeit, dies zu tun. Sie können dies jedoch einfach mit einem benutzerdefinierten Modellordner erreichen:
Der AllowHtmlBinder-Code:
Den vollständigen Quellcode und die Erklärung finden Sie in meinem Blogbeitrag: https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
quelle
Die URL-Codierung der Daten funktioniert auch bei mir
Beispielsweise
var data = '<b> Hallo </ b>'
Rufen Sie im Browser encodeURIComponent (Daten) vor dem Posten auf
Rufen Sie auf dem Server HttpUtility.UrlDecode (receive_data) auf, um zu dekodieren
Auf diese Weise können Sie genau steuern, in welchem Feldbereich HTML zulässig ist
quelle
Ich habe dieses Problem bei der Entwicklung einer E-Commerce-Website mit NopCommerce festgestellt. Ich habe diese Lösung auf drei verschiedene Arten erhalten, wie in den vorherigen Antworten. Aber laut der NopCommerce-Struktur habe ich diese drei nicht gleichzeitig gefunden. Ich habe gerade gesehen, dass sie dort nur verwenden
[AllowHtml]
und es funktioniert gut, außer bei jedem Problem. Wie zuvor gestellte FragePersönlich bevorzuge ich es nicht,
[ValidateInput(false)]
weil ich die Überprüfung der gesamten Modellentität überspringe, was unsicher ist. Aber wenn jemand nur schreibt , schauen Sie hierdann wird nur eine einzelne Eigenschaft übersprungen, nur eine bestimmte Eigenschaft zugelassen und kaum alle anderen Entitäten überprüft. Daher scheint es mir vorzuziehen.
quelle
In meinem Fall funktionierte das AllowHtml-Attribut in Kombination mit dem OutputCache-Aktionsfilter nicht. Diese Antwort löste das Problem für mich. Hoffe das hilft jemandem.
quelle
Sie können
[AllowHtml]
zum Beispiel für Ihr Projekt verwendenZur Verwendung dieses Codes für die Klassenbibliothek installieren Sie dieses Paket
Nach Gebrauch Dies
using
quelle
Keine der Antworten hier hat bei mir leider funktioniert.
Am Ende habe ich Custom Model Binding verwendet und einen Sanitizer von Drittanbietern verwendet.
Siehe meine selbst beantwortete Frage hier .
quelle