Start · Sprachen · PHP · Referenz · untaint

untaint

Funktion

Entfernt die Unsicher-Markierung (Taint) von einem oder mehreren Strings, die zuvor als unsicher markiert wurden.

Kategorie: misc

Signatur

untaint(string &$var, string &...$vars): bool

Beschreibung

untaint() ist Teil des experimentellen PHP-Taint-Extensions (z. B. laruence/taint) und entfernt die interne Markierung, die einen String als potenziell unsicher ("tainted") kennzeichnet. Diese Markierung wird automatisch gesetzt, wenn Daten aus externen Quellen wie $_GET, $_POST, $_COOKIE oder $_SERVER stammen.

Das Taint-Konzept verfolgt das Ziel, unsichere Eingaben im Code zu verfolgen und Warnungen auszugeben, sobald diese unbereinigt in sicherheitskritischen Funktionen (wie SQL-Abfragen oder HTML-Ausgaben) verwendet werden. untaint() signalisiert dem Taint-System, dass ein String als sicher betrachtet werden darf – beispielsweise nachdem er durch geeignete Bereinigungsfunktionen wie htmlspecialchars() oder PDO::quote() verarbeitet wurde.

Die Funktion nimmt eine beliebige Anzahl von String-Variablen per Referenz entgegen und gibt true zurück, wenn die Markierung erfolgreich entfernt wurde. Sie sollte ausschließlich dann eingesetzt werden, wenn der Entwickler sicher ist, dass die betreffenden Werte ordnungsgemäß validiert oder bereinigt wurden.

Hinweis: untaint() ist keine native PHP-Kernfunktion, sondern erfordert die Installation der Taint-PECL-Extension. Im Produktionseinsatz sollte die manuelle Bereinigung durch bewährte Techniken wie Prepared Statements und kontextgerechtes Escaping erfolgen – untaint() dient primär als Hilfsmittel zur statischen Analyse im Entwicklungsprozess.

Parameter

Name Typ Default Beschreibung
$var Pflicht string Die String-Variable, deren Unsicher-Markierung entfernt werden soll. Wird per Referenz übergeben.
$vars string Beliebig weitere String-Variablen (variadic), deren Unsicher-Markierung ebenfalls entfernt werden soll. Jede wird per Referenz übergeben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Unsicher-Markierung erfolgreich von allen übergebenen Variablen entfernt wurde, andernfalls false.

Beispiele

Benutzereingabe bereinigen und als sicher markieren

<?php
// Taint-Extension vorausgesetzt

$username = $_GET['username'] ?? '';
// $username ist jetzt als 'tainted' (unsicher) markiert

// Bereinigung durch htmlspecialchars
$safeUsername = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');

// Nach der Bereinigung als sicher markieren
untaint($safeUsername);

// Jetzt kann $safeUsername ohne Taint-Warnung ausgegeben werden
echo "Willkommen, " . $safeUsername;
Willkommen, Max

Mehrere Variablen gleichzeitig als sicher markieren

<?php
// Taint-Extension vorausgesetzt

$firstName = $_POST['first_name'] ?? '';
$lastName  = $_POST['last_name']  ?? '';

// Beide Variablen bereinigen
$firstName = htmlspecialchars($firstName, ENT_QUOTES, 'UTF-8');
$lastName  = htmlspecialchars($lastName,  ENT_QUOTES, 'UTF-8');

// Beide in einem Aufruf als sicher markieren
untaint($firstName, $lastName);

echo $firstName . ' ' . $lastName;
Max Mustermann

// Wichtig · Fallstricke

Sicherheitswarnung: untaint() entfernt lediglich die interne Markierung im Taint-System – es führt selbst keine Bereinigung oder Validierung durch. Ein voreiliges Aufrufen von untaint() ohne vorherige echte Bereinigung hebelt den Schutzmechanismus vollständig aus und kann zu XSS, SQL-Injection oder anderen Schwachstellen führen.

Die Funktion ist nur verfügbar, wenn die PECL-Taint-Extension installiert und aktiv ist. Sie ist nicht Teil des PHP-Kerns und steht in Standard-PHP-Installationen nicht zur Verfügung.

Das Taint-System eignet sich primär als Werkzeug in der Entwicklungs- und Testumgebung. Im Produktionsbetrieb sollten robuste Sicherheitsmaßnahmen wie Prepared Statements, htmlspecialchars() und Eingabevalidierung unabhängig vom Taint-Status konsequent eingesetzt werden.