Ich habe ein Textfeld, das eine Zeichenfolge anzeigt, die < und > enthält. Der Code gibt deshalb einen Fehler aus. Wie kann ich die Verwendung dieser Zeichen in meinem Textfeld zulassen?
Danke :)
Ich habe ein Textfeld, das eine Zeichenfolge anzeigt, die < und > enthält. Der Code gibt deshalb einen Fehler aus. Wie kann ich die Verwendung dieser Zeichen in meinem Textfeld zulassen?
Danke :)
Das Problem ist, dass es nicht funktioniert, wenn es auf den Server übertragen wird, egal was man versucht. Dies ist der ASP.NET XSS-Schutz, der wie folgt deaktiviert werden kann:
<%@ Page ... ValidateRequest="false" %>
Das Problem ist, Sie müssen sehr vorsichtig sein, alle Postback selbst zu validieren. Einfacher ist es, alle Inhalte der Textbox mit Javascript kurz vor der Buchung zu entkommen. Sie können es mit dem gleichen HTML-Escaping zu entkommen, dann unescape in Server-Seite Code.
Aktualisierung: Beispiel für das Entkommen. Dadurch wird der geänderte Text vor dem Postback auf dem Bildschirm angezeigt - die ideale Lösung ist die Verwendung eines versteckten Feldes dafür, d.h. die Zuweisung eines Wertes an ein verstecktes Feld anstelle desselben Feldes. Dies ist die einfachste Variante:
<script>
function EscapeField(){
document.getElementById("your client control ID").value =
escape(document.getElementById("your client control ID").value);
}
</script>
Und in Code-Behind:
this.ClientScript.RegisterOnSubmitStatement(this.GetType(),
"EscapeField", "EscapeField();")
Aktualisierung: Nochmals eine Warnung: Wenn Sie HTML auf diese Weise in Ihrer Datenbank speichern und es dann einfach auf dem Client anzeigen, sind Sie direkt anfällig für XSS-Angriffe. Es gibt Würmer, die Ihre Website finden und ausnutzen werden. Stellen Sie sicher, dass Sie das HTML, das Sie erhalten, bereinigen.
Wenn Sie sich in einer asp.net-Seite befinden, können Sie den gesamten Ausgabetext in eine Server.HtmlEncode("YourTextWith<and>Characters")
Funktion und sie kodiert alle fragwürdigen Zeichen für Sie.
Wenn Sie dies aus irgendeinem Grund in einer .cs-Datei tun, können Sie Folgendes verwenden System.Web.HttpUtility.HtmlEncode("YourTextWith<and>Characters")
bevor es an die Präsentationsebene weitergegeben wird.
Konvertieren Sie sie in <
y >
. In Html, <
wird umgewandelt in <
y >
wird umgewandelt in >
ohne dass er es für einen Teil des Markups hält. Also die Zeichenfolge <Blah>
wird <Blah>
.
bearbeiten : Ich vergaß, um sie automatisch zu konvertieren und alle HTML-Zeichen zu entschlüsseln (damit dies kein Problem für andere Dinge ist), können Sie in Asp.net verwenden Server.HtmlEncode(string)
um alle Zeichen, die Probleme verursachen könnten, automatisch in ihre HTML-Entsprechung umzuwandeln.
Die einfachste Lösung ist die Deaktivierung der Anforderungsvalidierung auf einzelnen Seiten
<%@ Page ... ValidateRequest="false" %>
aber vergessen Sie nicht, requestValidationMode="2.0" zu aktivieren.
<system.web>
...
<httpRuntime requestValidationMode="2.0" />
</system.web>
Diese Lösung könnte einige Gefahren bergen.
Eine weitere intelligente Lösung ist Ersetzen des vom Benutzer geschriebenen Textes durch Javascript um es für die Validierung sicher zu machen: <tag>
gilt als gefährlich, aber < tag>
gilt als sicher!
Ein Javascript-Ersatz kann das Problem lösen.
function validateTxt() {
$("textarea, input[type='text']").change(function () {
html = $(this).val(); //get the value
//.replace("a" , "b") works only on first occurrence of "a"
html = html.replace(/< /g, "<"); //before: if there's space after < remove
html = html.replace(/</g, "< "); // add space after <
$(this).val(html); //set new value
});
}
$(document).ready(function () {
validateTxt();
});
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.