Alle Artikel

HTML Entities: Sonderzeichen sicher auf einer Seite ausgeben

In HTML haben die Zeichen <, > und & eine besondere Bedeutung und müssen escaped werden, aber im Deutschen kommen gleich drei weitere Sonderfälle dazu: die Anführungszeichen „unten-oben", das scharfe ß und drei Umlaute, die es in kaum einer anderen Sprache in dieser Form gibt.

Deutsche Anführungszeichen: „unten" statt "oben"

Während im Englischen Anführungszeichen oben beginnen und enden ("wie hier"), verwendet die deutsche Typografie das untere Anführungszeichen &bdquo; als Öffner und das obere &ldquo; als Schließer – „wie hier". Wer ein englisches CMS-Theme unverändert für deutsche Inhalte übernimmt, zeigt oft versehentlich die falsche Konvention an, weil die Anführungszeichen-Entities im Template hart codiert sind.

Das scharfe ß – ein Zeichen ohne Großbuchstaben-Tradition

Das Eszett &szlig; (ß) hat lange keinen offiziellen Großbuchstaben gehabt; "STRASSE" statt "STRAßE" war Standard in Versalschrift. Seit 2017 existiert mit &#7838; (ẞ) offiziell auch ein großes ß, das aber in Schriftarten, Tastaturen und älteren Datenbanken oft schlicht fehlt – ein Fall, in dem die numerische Entity oft die einzige verlässliche Methode ist, das Zeichen überhaupt darzustellen.

Umlaute in URLs, IDs und alten Formularen

Wörter wie "Straße" oder "Übergröße" enthalten Zeichen (&auml;, &ouml;, &uuml;, &szlig;), die in älteren, nicht auf UTF-8 ausgelegten Systemen – etwa Legacy-Exportformate oder E-Mail-Betreffzeilen mit ISO-8859-1 – noch heute als Entity kodiert auftauchen, obwohl das eigentliche HTML-Dokument längst UTF-8 verwendet.

Der minimale Zeichensatz zum Escapen

  • <&lt; – damit kein Tag beginnt.
  • >&gt; – um Text nach einem Tag korrekt abzuschließen.
  • &&amp; – damit das & nicht als Beginn einer anderen Entity gelesen wird.
  • " und '&quot;, &#39; – zwingend innerhalb von Attributwerten in Anführungszeichen.

Der Zusammenhang mit XSS

Die meisten XSS-Schwachstellen entstehen genau deshalb, weil vom Nutzer eingegebener Text ohne Escaping in HTML eingefügt wird. Wird „<script>...</script>" ohne Umwandlung in Entities ausgegeben, führt der Browser es als Code aus. Escaping ist eine grundlegende – aber nicht die einzige – Schutzmaßnahme.

Kontext ist entscheidend: Text gegen Attribut

Das Escapen von <, > und & reicht für Text zwischen Tags aus, aber innerhalb eines Attributs in Anführungszeichen musst du zusätzlich genau das Anführungszeichen escapen, das verwendet wird – doppelt oder einfach. Ist ein Attribut durch doppelte Anführungszeichen begrenzt und enthält der Wert ein nicht escaptes doppeltes Anführungszeichen, „reißt" die Markup-Struktur früher ab als erwartet.

Tool ausprobieren