Skip to main content

Die PHP-Funktion htmlspecialchars() wandelt spezielle HTML-Zeichen in ihre entsprechenden HTML-Entitäten um. Dies ist ein entscheidender Sicherheitsmechanismus, um Cross-Site-Scripting-Angriffe (XSS) zu verhindern.

 

Wie die Funktion arbeitet

 

htmlspecialchars() durchsucht einen String nach bestimmten Zeichen, die in HTML eine besondere Bedeutung haben, und ersetzt sie durch ihre ungefährlichen Gegenstücke. Standardmäßig werden die folgenden fünf Zeichen umgewandelt:

  • & (kaufmännisches Und) wird zu &
  • " (doppelte Anführungszeichen) wird zu " (nur wenn ENT_QUOTES oder ENT_HTML5 gesetzt ist)
  • ' (einfaches Anführungszeichen) wird zu ' (nur wenn ENT_QUOTES oder ENT_HTML5 gesetzt ist) oder '
  • < (Kleiner-als-Zeichen) wird zu &lt;
  • > (Größer-als-Zeichen) wird zu &gt;

Durch diese Umwandlung stellt der Browser die Zeichen als Text dar, anstatt sie als HTML-Code zu interpretieren. Wenn ein Angreifer beispielsweise versucht, <script>alert('XSS');</script> in ein Formular einzugeben, würde htmlspecialchars() dies in &lt;script&gt;alert('XSS');&lt;/script&gt; umwandeln. Dieser entschärfte Code wird vom Browser als einfacher Text angezeigt und das schädliche Skript wird nicht ausgeführt.


 

Wann man sie verwenden sollte

 

Immer dann, wenn Benutzereingaben oder beliebige unsichere Daten in einem HTML-Kontext ausgegeben werden.

Dies ist eine grundlegende Sicherheitsregel in der Webentwicklung. Jedes Mal, wenn Sie Daten aus einer Datenbank, einem Formular, einer API oder einer anderen externen Quelle abrufen und auf Ihrer Webseite anzeigen, sollten Sie diese mit htmlspecialchars() behandeln.

Typische Anwendungsfälle sind:

  • Anzeigen von Kommentaren: Verhindert, dass Benutzer schädlichen HTML- oder JavaScript-Code in ihren Kommentaren posten.
  • Ausgabe von Formulareingaben: Wenn ein Formular nach dem Absenden erneut mit den zuvor eingegebenen Daten angezeigt wird (z. B. bei einer Fehlermeldung).
  • Anzeige von Inhalten aus einer Datenbank: Jeglicher Text, der von Benutzern erstellt und in der Datenbank gespeichert wurde.
  • Suchergebnisse: Anzeige des Suchbegriffs auf der Ergebnisseite.

Beispiel:

Unsicherer Code:

PHP

<?php
$benutzername = $_POST['username'];
echo "Hallo, " . $benutzername;
?>

Wenn ein Angreifer hier <script>...</script> eingibt, wird es direkt im HTML ausgeführt.

Sicherer Code:

PHP

<?php
$benutzername = $_POST['username'];
echo "Hallo, " . htmlspecialchars($benutzername, ENT_QUOTES, 'UTF-8');
?>

Hier wird jede schädliche Eingabe unschädlich gemacht und als reiner Text angezeigt. Es ist eine bewährte Praxis, zusätzlich die Flags ENT_QUOTES (um sowohl einfache als auch doppelte Anführungszeichen zu konvertieren) und die Zeichenkodierung wie 'UTF-8' anzugeben.

Leave a Reply