.Net 4.0 codiert ein einzelnes Anführungszeichen, wenn Attribute.Add verwendet wird

9

.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?

    
Hassan Mokdad 06.08.2013, 09:07
quelle

6 Antworten

0

Danke an Franzos Link , wo die folgende Antwort kopiert und eingefügt wird:

  

Sie können die Attributcodierung deaktivieren, indem Sie eine Klasse wie diese erstellen:

%Vor%
  

und fügen Sie dies web.config unter:

hinzu
%Vor%
  

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.

    
Hassan Mokdad 04.12.2013, 12:26
quelle
4

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.

Quelle

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:

%Vor%

Dies führt zu einem Stück JavaScript in Ihrer Seite, das das Attribut clientseitig setzt.

    
Michiel van Oosterhout 06.08.2013 11:49
quelle
1

Die beste Möglichkeit zum Festlegen von Ereignisattributen in .NET besteht darin, eine einzelne Funktion aufzurufen:

%Vor%

Und auf Ihrer Seite oder einem registrierten Skript:

%Vor%     
Sebris87 25.06.2014 10:02
quelle
0

imgTest.Attributes.Add("onmouseover", "alert(\'Hello\')");

    
Naoe 06.08.2013 11:41
quelle
0

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.

    
Henry 23.04.2014 17:18
quelle
-2

Sie können ein Escape-Zeichen vor jedem Anführungszeichen verwenden:

Quelle:

%Vor%

Rendern:

%Vor%     
David 03.01.2015 12:59
quelle