Laden...

Verhindern von HtmlJnjection per HtmlEncode inkl. UTF8

Erstellt von TiltonJH vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.025 Views
TiltonJH Themenstarter:in
87 Beiträge seit 2006
vor 12 Jahren
Verhindern von HtmlJnjection per HtmlEncode inkl. UTF8

Hallo,

um immer wieder benötigte Kombinationen von ASP-Controls nich immer wieder zusammenbauen zu müssen habe ich mir eigene UserControls gebaut. Soweit so gut, alles kein Problem.

Ist oft sowas von der Art:


<asp:Literal runat="server" ID="caption" />
<asp:DropDownList runat="server" ID="dropDownList" />
<asp:RequiredFieldValidator runat="server" ID="requiredFieldValidator" ControlToValidate="dropDownList" ErrorMessage="<%$ Resources:Lang,ErrorEntryRequired %>" />

Wenn ich die Bezeichnung, also das Literal mit Namen aus der Datenbank füttere, welche der User selber definieren kann. Genau hier is die Möglichkeit von HtmlJnjection gegeben.

Einfache Lösung:


public string Caption
{
	get { return this.dropDownList.ToolTip; }
	set
	{
		var text = this.Server.HtmlEncode(value);
		this.caption.Text = string.Concat(text, ": ");
		this.dropDownList.ToolTip = text;
	}
}

Frage:

Wie kann ich dem HtmlEncode einreden UTF8 Zeichen in Ruhe zulassen? ZB. muss der mir die ä, ö, usw. nicht mit encodieren. Oder sollte man das trozdem? Nur umsicherzugehn? 🤔

MfG

TiltonJH

PS: Hin und wieder is das total verzwickt, manche ASP-Controls machen selber ein HtmlEncode, ander nich. Machne wieder rum nicht bei allen Eigenschaften...

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra

G
538 Beiträge seit 2008
vor 12 Jahren

Ich glaube "Label" statt Literal könnte dich schon "erlösen".

Im übrigen ist öäü encodiert gar nicht weiter schlimm - würde ich mich nicht mit aufhalten

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

TiltonJH Themenstarter:in
87 Beiträge seit 2006
vor 12 Jahren

Ein Label rendert aber auch einen

<span></span>

, das will ich aber nich.

Aufhalten lass ich mich davon nich, nur eure Meinungen hätten mich mal interessiert.

MfG

Tilton

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra

16.834 Beiträge seit 2008
vor 12 Jahren

Hi,

Wenn Du Dich eh nicht davon abhalten lässt und nicht kritikfähig bist, bringt's ja eh nichts.

Nichts desto trotz steht auch in der Doku, dass HtmlEncode Unicode zurück gibt. Deswegen wird "alles", was dem nicht entspricht, encodiert. Willst Du was anderes, musst Du es selbst bauen.
Dazu gibt es aber unzählige Snippets im Internet, da der Encoder sowieso einiges nicht beachtet.

Kodierte Umlaute sind werden meines Wissens bei Tooltips nicht korrekt interpretiert - sprich sie bleiben als Html Char erhalten, wenn ich mich nicht irr.

TiltonJH Themenstarter:in
87 Beiträge seit 2006
vor 12 Jahren

Hallo Abt,

hättes du meinen und den post von Grumbler85 richtig gelesen, wäre dir aufgefallen das wir das Wort "AUFhalten" benutzt haben und nicht "ABhalten" ergo, kann überhaupt nicht einschätzen in wie weit ich kritikfähig bin oder eben nicht.

Damits deutlicher wird:

Nein, ich lasse mich natürlich nicht von der Tatsache aufhalten, dass HtmlEncode ä, ö, ü usw encodiert. Nur finde ich es nicht sonderlich clever, wenn das dann gerenderte HTML-Dokument eh UTF8 kodiert ist. ä, ö, ü usw sind Bestandteil von UTF8 und müssten somit nicht (zb. "ä" == "ä") kodiert werden. Spinnt man dies Szenario weiter, würden (ich habs noch nicht probiert) auch kyrillische oder chinesische Schriftzeichen so umkodiert werden. Und somit wäre die generelle Codierung auf UTF8 eigentlich zwecklos.

ToolTips & HtmlEncode

Im vorliegendem Beispiel sieht es folgendermaßen aus:
Doch auch in ToolTip werden Kodierte Umlaute vom Browser richtig dargestellt. Aber es ist zu beachten um welches Control und welche Eigenschaft es ich handelt, weil es sonst zu einer Doppelten Encodierung kommen kann, welche den Eindruck von nicht korrekter Interpretation erweckt: Bsp: "ä" -1. Encodierung-> "ä" -2. Encodierung-> "&amp;#228;" lesen kann man dann "ä" anstelle von dem erwartetem "ä", ist aber auch nicht anders zu erwarten.

HtmlEncode & Unicode
Ja, natürtlich gibt HtmlEncode Unicode zurück. Ein System.String Objekt ist immer Unicode, dass sagt aber doch nur wie die binäre Repräsentation eines Char Objektes ist und nicht welche Chars enthalten sind.
Das einzige wo das mal eine Rolle spielt ist für den HtmlWriter, welcher die Seite rendert. Denn der muss jetzt aus dem allgemeinen Unicode, UTF8 machen. (Wobei UTF8 ist eine Form von Unicode ist aber eben nicht die, die von System.String Objekten genutzt wird.)

Was sollte das HtmlEncode nun eigentlich nur machen?
Alle Zeichen eines Stings in eine HTML -"Escapete" Form überführen, die ein Browser als Steuerzeichen interpretieren könnte oder in der für die Seite gewählte Text-Encodierung nicht vorhanden ist.
Daher die Frage: Gibt es sowas und wenn ja wo?

Bis jetzt sieht es wirklich so aus als wenn ich das selber machen müsste. 😜 Finde ich blöd.

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo,

Gibt es sowas und wenn ja wo?

Hab' ich noch nicht gesehen. Vielleicht mal bei Codeproject oder so suchen.

Andererseits sind es - wenn Du konsequent UTF-8 benutzt - genau 4 Zeichen, die Du noch ersetzen musst, nämlich die unter Benannte Zeichen für HTML-eigene Zeichen aufgeführten. Da hält sich der Aufwand in Grenzen.

Vor einer doppelten Codiereung musst Du Dich allerdings selber schützen - ein einmal codierter String sollte aber auch nicht nochmal kodiert werden, sonst ergibt sich genau die Problematik mit & in vorhandenen Entitäten.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

16.834 Beiträge seit 2008
vor 12 Jahren

Hallo,

Du bewegst Dich auf der Stelle.

Damit's deutlicher wird: ich habe mit Absicht das Wort "alles" in Anführungszeichen genannt, da der HtmlEncoder auch nicht perfekt arbeitet. Aber aufgrund dieser Tatsache gibt es eben viele viele andere Ausführungen und Schnippsel im weiten weiten Web, die genau diese Aufgabe erfüllen.

HtmlEncode ist schlichtweg egal, ob Deine Seite UTF-8 ist, oder aus kyrillischen Elementen besteht.. oder oder oder... Das was Du forderst, kann es nicht. Punkt.
Stört Dich diese Art und Weise: bau Dir was eigenes - oder such ein Snippets, das dies kann 👍

Für's doppelte Kodieren: das kann Dir - wie MarsStein es schon sagt - niemand abnehmen.

Gruß