2009-04-18 10 views
17

I wie für den Unterschied zwischen den Begriffen verwirrt bin "Flucht" und "Codierung" in Sätzen wie:Xml Escaping/Encoding Terminologie

XML-Kodierung

Xml Escaping

Encoded Html

Entkommen URL

...

Can jemand erklärt es mir?

Antwort

24

Encoding beschreibt, wie die Zeichen der Datei physisch in Binär geschrieben werden (wie in Unicode oder ANSI).

Escaping bezieht sich auf den Prozess des Ersetzens Sonderzeichen (wie < und >) mit ihren XML entity Äquivalent (wie &lt; und &gt;). Bei URLs bezieht sich Escaping auf das Ersetzen von Zeichen durch Zeichenfolgen, die mit % beginnen, z. B. für einen einzelnen Leerraum.

Flucht ist von Sprache zu Sprache unterschiedlich, aber Codierungen sind in der Regel weit akzeptierte Standards. Manchmal werden die Begriffe mehrdeutig verwendet (insbesondere mit Codierung, die verwendet wird, um zu entkommen), aber sie sind gut definiert und verschieden.

+3

Eine pedantische Klarstellung: "Unicode" ist keine Kodierung, sondern ein Zeichensatz (UTF-8, ISO8859-1, CP850 sind Beispiele für Kodierungen). Leider werden Unicode und UTF-8 oft synonym verwendet, während dies nicht der Fall ist. – tokland

+0

Vereinbart, dass "Codierung" ist der richtige Begriff w/r/t "Zeichencodierung", aber diese Begriffe sind nicht "gut definiert und deutlich", wenn es um den Prozess der Ersetzung von Zeichen kommt, um spezielle Interpretation zu vermeiden. Siehe meine Antwort. –

+0

In Bezug auf was Yaron gefragt hat, beachten Sie, dass in der.NET-Framework haben Sie diese beiden Methoden, die fast das gleiche tun: 'HttpUtility.UrlPathEncode' und' Uri.EscapeUriString'. – Andrew

6

In jeder Webanwendung bestehen Daten aus verschiedenen Schichten, wie der Ansichtsebene, der Modellschicht, der Datenbankschicht usw. Jede Schicht soll "unabhängig" entwickelt werden, um verschiedenen Skalierbarkeits- und Wartbarkeitsanforderungen zu genügen.

Nun muss im Grunde jede Schicht mit jedem "sprechen", und sie müssen sich für eine Sprache entscheiden, über die sie sprechen können. Dies wird als Codierung bezeichnet. Es gibt verschiedene Arten von Kodierungen, wie ASCII, UTF-8, UTF-16 usw. Wenn nun der Benutzer zum Beispiel Chinesisch oder Japanisch ist, dann würde ASCII für ihn nicht funktionieren, daher würde er mit UTF-16 weitermachen jede andere Kodierungstechnik, die die Kommunikation auf Chinesisch garantiert. Von der Web-Schicht aus würden chinesische Schriftzeichen die Business-Schicht und dann die Daten-Schicht durchlaufen, und überall sollte das gleiche "Kodierungs" -Schema verwendet werden.

Warum?

Nehmen wir nun an, Ihre Web-Schicht sendet Daten in UTF-16, unterstützt chinesische Sprache, aber die Datenbank-Schicht akzeptiert, nur ASCII, dann würde die Datenbank-Ebene verwirrt werden, was redest du! es versteht nur englische Zeichen, es versteht den Rest nicht. Hier ging es um Kodierung.

Escaping:

Es gibt einen bestimmten Satz von Daten „Metadaten“, die eine besondere Bedeutung aus dem Browser Perspektive haben. Beispielsweise sind <> Metadaten aus der Browserperspektive. Der Browser-Parser weiß, dass alle Daten innerhalb dieser <> interpretiert werden sollen. Jetzt verwenden die Angreifer diese Technik, um die Browser zu verwirren. Beispiel:

<input type="text" value="${name} /> 

, wenn ich den Namen mit

name="/><script>alert(document.cookie)</script> 

Dann wird der resultierende Code ersetzen, wie der Browser es

<input type="text" value=""/><script>alert(document.cookie)</script> /> 

bedeutet, Sie müssen die anweisen, jetzt wird sieht browser, dass, was auch immer ich in die name="" legte, sollte "Escape" sein, oder sollte nur als Daten betrachtet werden. So gibt es verschiedene Funktionen, die entweder <> als HTML-Entsprechung %3C%3E kodieren/entziehen, so dass der Browser jetzt weiß, dass dies anders behandelt werden muss. Im Grunde zu entkommen heißt, sich ihrer eigentlichen Bedeutung zu entziehen (grob gesagt).

<input type="text" value="${fn:escapeXML(name)} /> 

mit JSTL.

0

TL; DR Beide Begriffe sind austauschbar (wenn Sie einige Zeichen konvertieren möchten, werden sie als einfache String-Daten interpretiert werden). Diese Debatte ist alt. Von CWE-116: Improper Encoding or Escaping of Output:

Die Verwendung der Begriffe "Codierung" und "Entkommen" ist sehr unterschiedlich. Für Beispiel werden in einigen Programmiersprachen die Begriffe synonym verwendet, während andere Sprachen APIs bereitstellen, die beide Begriffe für verschiedene Aufgaben verwenden. Diese überlappende Verwendung erstreckt sich auf das Web, , wie beispielsweise die "Escape" -JavaScript-Funktion, deren Zweck als -Codierung angegeben ist. Natürlich sind die Konzepte der Kodierung und Flucht vor dem 0.Web von Jahrzehnten. Angesichts eines solchen Kontexts ist es für CWE schwierig, ein konsistentes Vokabular zu übernehmen, das nicht von irgendeinem Wahlbezirk falsch interpretiert wird.

Komisch genug JavaScript hat auch encodeURIComponent() und seine specification vermeidet die Debatte völlig:

Die encodeURIComponent Funktion berechnet eine neue Version eine URI in , die jede Instanz bestimmter Zeichen ersetzt wird durch eins, zwei, drei oder vier Escape-Sequenzen, die die UTF-8-Codierung des -Zeichens darstellen.

persönlich glaube ich es als „Codierung“ in dem allgemeinen Prozess Bezug zu nehmen geeignetere ist, da man ein code ist schaffen, indem ein über einen Kommunikationskanal übertragen werden (ein Stück Auszeichnungs/Programmiercode) und interpretierte Empfänger (der Parser). Ich denke, es ist dumm, < durch etwas völlig anderes wie &#60; zu ersetzen und das "Entkommen" zu nennen.

+0

Zum Beispiel haben Sie im .NET-Framework diese zwei Methoden, die fast das gleiche tun: 'HttpUtility.UrlPathEncode' und' Uri.EscapeUriString'. – Andrew

Verwandte Themen