PHP 5.2 vereinfacht sichere Programmierung

Steffen Weber
13 Kommentare

Release-Manager Ilia Alshanetsky hat Version 5.2 der populären Scriptsprache PHP freigegeben. Einige bereits für PHP 5.1 verfügbare Erweiterungen sind nun fester Bestandteil von PHP. Die neue Einstellung „allow_url_include“ könnte ein häufiges Sicherheitsproblem in PHP-Anwendungen schließen.

Ganz oben auf der Liste der Änderung stehen Verbesserungen an der Speicherverwaltung von PHP, welche nun performanter zu Werke gehen und den tatsächlichen Speicherverbrauch eines Scripts genauer ermitteln soll. Die bisherige Speicherverwaltung hat den Speicherhunger von PHP-Anwendungen desöfteren unterschätzt, weshalb nun in der Konfigurationsdatei die Einstellung „memory_limit“ einen Standardwert von 16 MB anstatt 8 MB aufweist.

Schon für PHP 5.1 als separate PECL-Erweiterungen verfügbar sind JSON, Filter und ZipArchive. Alle drei sind nun fester Bestandteil von PHP 5.2. ZipArchive ermöglicht das Lesen und Schreiben von Zip-Archiven. Hinter JSON verstecken sich lediglich die beiden Funktionen „json_encode“ und „json_decode“, welche das Konvertieren zwischen PHP-Variablen und der JavaScript Object Notation ermöglichen, welche bei der Kommunikation zwischen dem Webserver und Browser mittels JavaScript zunehmend Verwendung findet.

Genauer anschauen sollte sich jeder PHP-Entwickler die neuen Filter-Funktionen. Diese ermöglichen das unerlässliche Validieren von Eingabedaten. Beispielsweise lässt sich sicherstellen, dass ein übergebener Wert tatsächlich numerisch ist – worauf sich die folgenden Programmzeilen dann verlassen können. Bisher musste jede PHP-Anwendung eigene Funktionen für diese wichtige Aufgabe mitbringen.

Neben der Einstellung „allow_url_fopen“, welche PHP-Anwendungen den Zugriff auf fremde Server gestattet, gibt es in PHP 5.2 eine weitere sicherheitsrelevante Einstellung namens „allow_url_include“. Letztere erlaubt das Laden und Ausführen von PHP-Scripten, welche sich auf fremden Servern befinden und ist standardmäßig deaktiviert. In älteren PHP-Versionen als 5.2 wirkt sich „allow_url_fopen“ auf beide Szenarien aus – soll die PHP-Anwendung also Zugriff auf fremde Server haben, wird automatisch die problematische Funktionalität der „include“- und „require“-Anweisungen aktiviert.

Wenn eine Anwendung also den an die „include“- oder „require“-Anweisung übergebenen Parameter nicht überprüft, kann ein Angreifer in älteren PHP-Versionen beliebige Befehle nachladen und ausführen. Doch auch bei Verwendung von PHP 5.2 muss der an die „include“- oder „require“-Anweisung übergebene Parameter natürlich weiterhin überprüft werden, denn auch das Auslesen des Inhalts beliebiger Dateien im lokalen Dateisystem des Servers ist eine Sicherheitslücke.

Mit dem neuen Fehlertyp E_RECOVERABLE_ERROR, der zwischen E_WARNING und E_ERROR angesiedelt ist, werden nun Fehler markiert, welche für die Ausführung der PHP-Anwendung gefährlich sind, die jedoch PHP an sich nicht in einem instabilen Zustand hinterlassen. Solche Fehler kann eine PHP-Anwendung nun abfangen – im Gegensatz zu Fehlern vom Typ E_ERROR, bei denen PHP nach wie vor das Ausführen des Scripts sofort abbricht.

Darüber hinaus besitzt PHP nun grundsätzlich die Möglichkeit, den Fortschritt von Datei-Uploads via HTTP auszulesen, so dass dem Anwender einer Webanwendung ein Fortschrittsbalken angezeigt werden kann. Um den Upload-Fortschritt bestimmen zu können, ist jedoch momentan noch das Installieren einer Entwicklerversion der PECL-Erweiterung APC („Alternative PHP Cache“) notwendig.

Die beiden neuen Klassen DateTime und DateTimeZone stellen Methoden zum Rechnen mit Daten zur Verfügung. Zudem erlaubt PHP 5.2 nun keine Klassenmethoden mehr, die unsinnigerweise sowohl „abstract“ als auch „static“ deklariert wurden. Die Textdatei Update 5.2 listet alle relevanten Änderungen detailliert auf. Der Quelltext sowie fertig kompilierte Versionen für Windows steht zum Download bereit.