Ich habe das Problem, dass ich Sonderzeichen (in einer codierten Art und Weise) bei der Eingabe verwendet werden, aber XSS verhindern soll. Ich habe dieses Problem anscheinend nicht, wenn ich das html-Attribut direkt setze (z. B. indem ich .html ("mein Wert") mit jquery), aber das Problem passiert, wenn ich Elemente verwende, ohne Tags wie INPUT zu schließen.Festlegen von Sonderzeichen im INPUT-Element, das Javascript nicht ausführt
Das ist mein Szenario:
Dynamische Client-Web-Service-Anforderung mit Ajax, so kann ich nicht eine Art von Inline-Code verwenden, um die Seite zu bauen. Dies geschieht, nachdem die Basisseite geladen wird:
var data = {
"key": "value"
}
$.ajax({
type: "POST",
url: "WebService.asmx/GetData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
dataType: "json",
success: function callFunction(result) {
if (result.d != null) {
// Building an HTML block
var preBuiltHtml = "<table style=\"width:100%;\">" +
"<tr>" +
"<td>Entry 1:</td>" +
"<td><input type=\"text\" id=\"txtEntry1\" maxlength=\"100\" value=\"" + result.d.return_value + "\" style=\"width:100%;\" ></td>" +
"</tr>" +
"</table>";
$('#someDialog').html(preBuiltHtml);
}
else {
showMessageDialog("Permission denied", 1);
}
},
error: function() { showMessageDialog('Error!', 2); }
});
Server-Seite (ASP.NET) mit Zeichencodierung zu verhindern XSS:
[WebMethod(true)]
public SomeClass GetProjectDetails(string proj_nr)
{
SomeClass result = new SomeClass();
result.return_value = Encoder.HtmlEncode("<IMG SRC=\"javascript: alert('XSS');\">");
return result;
}
Auf der Clientseite wird diese richtig in dem Eingangselement füllen , aber das Javascript wird ausgeführt. Wenn ich die jquery .val() -Methode verwende, um den Wert festzulegen, wird der HTML-Code für das Element vollständig durcheinander gebracht. Wenn ich mit einem .html() denselben Wert für ein div setze, ist alles in Ordnung, aber das kann ich nicht für ein Eingabeelement tun.
Was wäre der richtige Weg, um diese Art von Wert zu setzen, ohne dass es auf der Clientseite ausgeführt wird?
Vielen Dank im Voraus
Edit: Eine weitere Sache, wird die Warnmeldung wie man erwarten könnte nicht ausgeführt, so dass kein Meldungsfeld angezeigt wird. Aber ein Blick auf die Netzwerk-Registerkarte in dem Entwickler-Modus von Chrome können Sie einen Eintrag sehen:
Edit 2: String abgerufen von Web-Service-
OK vielleicht habe ich ein anderes Problem durcheinander gebracht, bei der Verwendung von .val() bleibt das Eingabefeld einfach leer und der Eintrag in der Netzwerk-Registerkarte passiert auch. FYI der verschlüsselte Wert, den ich vom Web-Server bekomme, sieht so aus, wie er in der letzten Bearbeitung meines Start-Posts hinzugefügt wurde. – vm370
@ vm370 also wollen Sie diese literale Zeichenfolge im Eingabefeld sehen? Wenn Sie 'input.val ('') setzen, würde ich nicht erwarten, etwas zu sehen, da es keinen einfachen Text zu zeigen gibt. – Keith
@ vm370 Antwort mit Schnipsel aktualisiert. – Keith