.Net 4.0 codiert einfache Anführungszeichen, wenn ich Attribute.Add verwende, um clientseitige Ereignisse zu meinen asp.net-Objekten hinzuzufügen. In den vorherigen Versionen ist das nicht passiert.
zum Beispiel:
%Vor%Wenn ich die clientseitige Ausgabe betrachte, bekomme ich
%Vor%Ich habe eine Problemumgehung gefunden, indem ich einen benutzerdefinierten Encoder erstellt habe: Erstellen von benutzerdefinierten Codierungsroutinen , aber ich möchte nicht um die Codierung für die gesamte Website zu stoppen, nur wegen dieses Problems. Hat jemand einen Workaround oder eine Idee, wie man das beheben kann?
Danke an Franzos Link , wo die folgende Antwort kopiert und eingefügt wird:
%Vor%Sie können die Attributcodierung deaktivieren, indem Sie eine Klasse wie diese erstellen:
%Vor%und fügen Sie dies web.config unter:
hinzu
Das gibt mir die Kontrolle, die ich brauche.
Aber jetzt müssen wir uns sorgen, dass neue Kontrollen vom Neuen abhängen können Standard-4.0-Verhalten und keine einfachen Anführungszeichen codieren, so ist es immer noch unvollkommen, nein, schlimmer als unvollkommen: Sicherheit ist noch schlimmer, weil Wir wissen nicht, was dort vor sich geht, also ist es keine große Problemumgehung wirklich.
Ich denke nur Microsoft kann das richtig beheben. Andere haben vorgeschlagen die Notwendigkeit für eine HtmlAttributeString-Klasse hier: Link Wenn dort Wäre so eine Klasse und Attribute.Add könnte ein Objekt so nehmen für seinen Wertparameter hätten wir dann die Kontrolle, die wir brauchen wieder.
Laut Microsoft sollten Sie HTML-Attributen JavaScript nicht mit WebControl.Attributes.Add()
hinzufügen, genau weil es den Attributwert codiert:
Sie können clientseitiges Skript nicht zu einer WebControl-Instanz hinzufügen, indem Sie Attributsammlung Verwenden Sie das ClientScript, um ein clientseitiges Skript hinzuzufügen Eigenschaft auf dem Seitensteuerelement.
Der Rat lautet, die Methode Page.ClientScript.RegisterExpandoAttribute(string controlId, string attributeName, string attributeValue, bool encode)
zu verwenden. In Ihrem Fall würde es so aussehen:
Dies führt zu einem Stück JavaScript in Ihrer Seite, das das Attribut clientseitig setzt.
Es wird nicht empfohlen, die Attributcodierung zu deaktivieren. Wenn Sie versuchen, die Codierung standardmäßig zu verhindern, werden in Zukunft viele seltsame Verhaltensweisen mit Ihrem Code auftreten, und Sie müssen den Preis für schlechte Praktiken bezahlen.
.NET codiert immer alle Attribute, um die Injektion von bösartigem Skript zu unterbinden. Sie sollten diese Standardvorgehensweise befolgen, um Ihr Programm zu schützen.
Tags und Links c# .net-4.0 asp.net encoding asp.net-4.0