HTML-Entity-Kodierer / -Decodierer

Sonderzeichen in HTML-Entitäten (&, <, ©) umwandeln oder Entitäten zurück in lesbaren Text decodieren — beide Richtungen, live.

957 Aufrufe

So funktioniert es

HTML reserviert eine Handvoll Zeichen für seine eigene Syntax: < und > markieren Tags, und & leitet eine Entity-Referenz ein. Tauchen diese Zeichen wörtlich in Inhalten auf, die in eine Seite eingefügt werden — ein Kommentar, ein Benutzername, eine zurückgespiegelte Suchanfrage —, versucht der Browser sie als Markup zu interpretieren, statt sie als Text anzuzeigen. Kodieren wandelt sie in ihre Entity-Form um (&lt;, &gt;, &amp;), sodass sie als reiner Text dargestellt statt interpretiert werden. Decodieren kehrt dies um und verwandelt Entitäten wie &amp; oder &#8217; zurück in die Zeichen, die sie repräsentieren.

Das ist keine kosmetische Kleinigkeit — es ist eine Sicherheitsmaßnahme. Fügt ein Kommentarfeld Nutzereingaben ohne vorherige Kodierung in das Seiten-HTML ein, kann ein Besucher <script>...</script> eintippen und dieses Skript tatsächlich im Browser jedes anderen Besuchers ausführen lassen: Diese Schwachstellenklasse heißt Cross-Site Scripting (XSS), und das Kodieren nicht vertrauenswürdiger Ausgaben, bevor sie mit HTML in Berührung kommen, ist die Standardverteidigung dagegen. Zum Beispiel wird der Text 5 < 10 & 10 > 5 beim Kodieren zu 5 &lt; 10 &amp; 10 &gt; 5 — das wird korrekt angezeigt und kann nicht mit Markup verwechselt werden.

Was Sie wissen sollten

  • Benannte und numerische Entitäten stellen dasselbe Zeichen unterschiedlich dar. &apos; (benannt) und &#39; (numerisch) bedeuten beide ein einfaches Anführungszeichen, aber benannte Entitäten hängen davon ab, dass der Parser genau diesen Namen kennt — numerische Entitäten (dezimal oder &#x hexadezimal) werden universell unterstützt und sind für maschinell erzeugte Ausgaben die sicherere Wahl.
  • Kodieren ist nicht die einzige Verteidigungslinie. Es schützt Textinhalte; Attribute, URLs und Inline-JavaScript-Kontexte benötigen eigene Escaping-Regeln, da ein Wert innerhalb von href="javascript:..." oder innerhalb eines <script>-Blocks nach anderen Regeln geparst wird als normaler Fließtext.
  • Die Umwandlung erfolgt lokal. Dieses Tool nutzt den eigenen DOM-Parser Ihres Browsers — nichts wird hochgeladen oder protokolliert.
  • Nicht jede serverseitige Template-Sprache escaped standardmäßig automatisch. Manche (wie ältere PHP-Ausgaben oder rohe String-Verkettung) verlangen einen expliziten Aufruf einer Escaping-Funktion — das zu vergessen ist eine der häufigsten Ursachen realer XSS-Bugs.
  • Manche Entitäten sehen sich optisch fast zum Verwechseln ähnlich. Ein gerades Apostroph (') und ein typografisches rechtes Anführungszeichen (&#8217;) wirken auf dem Bildschirm fast identisch, sind aber unterschiedliche Bytefolgen — ein Unterschied, der in Codebeispielen oder URLs eine Rolle spielt.

Ein konkretes Vorher/Nachher: Ein Kommentarfeld mit dem Inhalt Toller Beitrag! 5 < 10, oder? braucht als reiner Text keine besondere Behandlung, doch sobald er unescaped in eine HTML-Vorlage eingefügt wird, könnte ein böswilliger Besucher stattdessen <img src=x onerror=alert(1)> übermitteln — Kodierung macht daraus harmlosen, sichtbaren Text statt eines ausführenden Bildfehler-Handlers.

Häufig gestellte Fragen

Warum Text kodieren, bevor er in HTML eingefügt wird?

Ein nicht escaptes < oder & im HTML-Inhalt kann als Markup interpretiert werden, das Seitenlayout zerstören oder — weit schlimmer — dazu führen, dass eingeschleuste <script>- oder <img onerror>-Tags tatsächlich ausgeführt werden (Cross-Site Scripting). Die Kodierung zu &lt; und &amp; hält den Text wörtlich und harmlos, unabhängig davon, was ein Nutzer eingegeben hat.

Werden sowohl benannte als auch numerische Entitäten unterstützt?

Ja — beim Decodieren werden sowohl benannte Entitäten (&amp;copy;) als auch numerische verstanden, ob dezimal (&amp;#169;) oder hexadezimal (&amp;#x00A9;). Alle drei stehen für dasselbe ©-Zeichen; das Tool normalisiert jede dieser Formen zurück zum tatsächlichen Zeichen.

Warum eine numerische statt einer benannten Entität verwenden — oder umgekehrt?

Benannte Entitäten (&amp;apos;, &amp;hellip;) sind im Quelltext besser lesbar, verlassen sich aber darauf, dass der Parser genau diesen Namen kennt — bei einigen weniger gebräuchlichen ist die Unterstützung in älteren Tools uneinheitlich. Numerische Entitäten (&amp;#39;, &amp;#8230;) werden von jedem HTML-Parser unabhängig von Alter oder Hersteller universell verstanden, weshalb automatisierte Tools und Sanitizing-Bibliotheken sie oft bevorzugen.

Macht Kodieren allein meine Seite sicher vor XSS?

Es behandelt Textknoten, doch HTML kennt weitere Injection-Kontexte — innerhalb eines Attributwerts, innerhalb einer URL, innerhalb eines <script>- oder <style>-Blocks —, die jeweils eigene Escaping-Regeln brauchen, da der Parser des Browsers je nach Position im Dokument andere Regeln anwendet. Das Entity-Kodieren von Textinhalten ist eine wesentliche Schutzschicht, nicht die gesamte Verteidigung; ein umfassenderer "Sanitizing"-Schritt, der ganze Tags entfernt oder umschreibt, ist ein separates, meinungsstärkeres Werkzeug für den Fall, dass Sie bewusst etwas begrenztes HTML zulassen möchten.

Wird mein Text irgendwohin gesendet?

Nein — die Umwandlung erfolgt sofort in Ihrem Browser mit dem eigenen Parser des DOM; nichts wird hochgeladen, protokolliert oder gespeichert. Das macht es sicher, echte, von Nutzern eingereichte Inhalte zu testen — auch solche, bei denen Sie einen Injection-Versuch vermuten.

Kommentare

Noch keine Kommentare — schreiben Sie den ersten!

Ähnliche Tools