ASP.NET Anforderung Validierung mit HTML codierte Zeichen
Ich habe eine textbox in einer form, die Eingaben zu übernehmen, die mit HTML-tags.
Einreichen der Eingabe mit HTML-tags in die app werfen HttpRequestValidationException
, es sei denn, wir verwenden HttpUtility.HtmlEncode
. Einfach so weit.
Jedoch, die Eingabe kann auch Symbole enthalten, wie z.B. das "Grad" symbol (°). Wenn diese sind auch HTML-codiert, Sie werden numerische escape-codes, in diesem Beispiel °
. Diese codes können auch dazu führen HttpRequestValidationException
geworfen werden, aber die Frage ist, warum?
Ich kann nicht sehen, warum numerischen escape-codes gedacht sind, als potentiell gefährlich, vor allem als °
arbeitet als Eingabe nur in Ordnung.
Ich scheinen fest zu sein, wie das verlassen der Eingang ist nicht aufgrund der tags und HTML-Kodierung der Eingabe schlägt fehl, aufgrund der numerischen entweicht. Meine Lösung war bisher die HTML-Codierung, dann regex ersetzen Sie die escape-Sequenzen, die mit Ihren HTML-dekodiert Formen, aber ich bin mir nicht sicher, ob dies eine sichere Lösung, wie ich vermute, der escape-Sequenzen gelten als gefährlich für einen Grund.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist aufgrund ASP.NET builtin Cross-Site-Scripting validierungsfunktionen. Es ist eine Art Liste, was erlaubt ist und was nicht durch ASP.NET hier SO: ASP.NET Validierung Anforderung bewirkt: gibt es eine Liste?
Auf den spezifischen Fall von # codierten Zeichen, es ist eine komplette Referenz über XSS-Angriffe finden Sie hier: XSS (Cross Site Scripting) Cheat Sheet, die zeigen, wie Komplex diese Angriffe werden können, und warum codierte Zeichen sind verboten.
ASP.NET Ansicht html-char entweicht (&#xxx) gefährlich für den gleichen Grund Sie der Auffassung Spitzen Klammer gefährlich also XSS. Mit den oben entweichen können beliebige Zeichen (zum Beispiel Spitzen Klammer). Hier ist Zusammenfassung, was request-Validierung wird in 1.1 und 2.0.
In begründeten Fällen wie Ihrem Fall, Sie können wählen Sie eine der unten
Ebene (<%@ Page
validateRequest="false")
<
als<
oder nur in ein <, und es wird HTML-codiert zu<'
?Lesen Sie die Übersicht Über Skriptangriffe in der msdn-Hilfe.
Wenn Sie sicher sind, dass Sie behandeln alle möglichen bösartigen code, die Eingabe in Ihre Seite, dann können Sie die überprüfung deaktivieren mit <%@ Page validateRequest="false" %> Richtlinie.
Ich würde vorschlagen, auf der Suche zu tun, beschränkt html-Codierung, die auf der client-Seite wird ganz ein Kinderspiel zu tun mit jquery-durch die Bindung-Verarbeitung für ein Formular Absenden.
Was meine ich mit "eingeschränkt"? Kaufmännische und-Zeichen, Spitze Klammern und Anführungszeichen werden sollte codiert werden, aber nicht die unicode-Symbole. Sie wies darauf hin, dass in der Tat, numerische escape-codes sind böse und bekommen abgelehnt, im Gegensatz zu Ihren unescaped äquivalente!
Man könnte den string, du bist der Einreichung durch eine javascript-Funktion ähnlich wie der folgende code, geben Sie einen Wert, der bestehen würde, Validierung Anforderung:
Dadurch können Sie manchen Kummer, wenn nach dem speichern, oder einige server-side-Magie mit dem übermittelten Wert, Sie wollen re-zeigen Sie Sie in der Eingabe ist. Lassen Sie mich aufwendige: wenn Sie einfach eine Zeichenfolge codiert, die den Weg in einen leeren Absatz, machen wird es perfekt; jedoch, wenn Sie es dump in einem textarea-Komponente, werden Sie sehen, < statt <
Ironischerweise, beim verfassen des letzten Satzes musste ich geben &lt; und < jeweils...
Fügen Sie einfach in Ihre Seite Richtlinie (erste Zeile der Seite) dieses Attribut: