PHP
Go PHP 5
Tags: gophp5, PHP, php5
Go PHP 5 nennt sich eine Initiative, die den Umstieg von Webhostern und Webprojekten auf PHP 5.2 vorantreiben will.Auf vielen Servern wird nach wie vor PHP 4 eingesetzt. Dies führt dazu, dass von vielen neuen, sauberen Konstruktionen kein Gebrauch gemacht werden kann. Webprojekte müssen, wollen sie kompatibel bleiben, oft unschöne Workarounds einsetzen.
Bekanntlich setzt schokokeks.org schon sehr lange ausschließlich auf PHP 5, weswegen wir diese Aktion natürlich gerne unterstützen.
FastCGI für PHP ohne safe_mode
Tags: fastcgi, neues feature, PHPLeider ist der Betrieb des Apache-PHP-Moduls nur im sog. safe_mode möglich, da sonst jeder Benutzer alle Daten von anderen Benutzern auslesen könnte.
Leider gibt es Anwendungsbereiche, in denen der safe_mode zu Problemen führt, wie z.B. das nachträgliche Verändern von hochgeladenen Dateien. Bislang boten wir für solche Zwecke PHP-als-CGI unter SuExec an, aber das bringt leider das Problem, dass es sehr viel mehr Systemressourcen bei weniger Geschwindigkeit kostet.
Daher sind wir froh, jetzt PHP unter FastCGI anbieten zu können. das Prinzip bei FastCGI ist, dass ein PHP-Prozess wie ein normales CGI gestartet wird, dann aber im Speicher verbleibt um weitere Anfragen zu beantworten. Bei uns werden Prozesse nach 10 Minuten Inaktivität beendet. Eine wenig besuchte Seite hat also das Ergebnis ähnlich der bisherigen CGI-Variante, sobald jedoch mehrere Zugriffe hintereinander eingehen, liefert der Server eine deutlich bessere Agilität und die Seite wird schneller.
Wer also eine Anwendung benutzen will, die unter safe_mode nicht funktioniert, kann dies nun auf Wunsch bei uns umstellen lassen.
Ladebalken für alle!
Tags: File upload, hardened php, PHP, Progressbar, SuhosinWie ich in meiner Beschreibung der Neuerungen in PHP 5.2 erwähnte, wurde mit Version 5.2 die schicke Möglichkeit eingeführt, den Uploadprozess einer Datei mit einem Ladebalken auszustatten. Die löst das unschöne Problem, dass Benutzer von Webapplikationen häufiger keine Rückmeldung über den Status ihrer hochzuladenden Datei erhalten und somit häufiger nicht wissen, ob es noch weiter geht oder ob ein Fehler aufgetreten ist.
Christian Stocker hat diese Möglichkeit nun auch für PHP 4 und 5.1 in Form eines PECL-Pakets entwickelt. Wir werden also nun häufiger viele bunte Ladebalken sehen.
Übrigens wurde in dieser Extensions vor einigen Tagen eine Lücke gefunden, die es ermöglicht, auf der Maschine der Webapplikation Schadcode auszuführen. Dabei hilfreich war die Suhosin-Erweiterung des »Hardened PHP«-Projekts von Stefan Esser. Der große Vorteil diese Erweiterung im Vergleich zum Hardened-PHP-Patch ist, dass das PHP soweit unverändert bleibt, es also Binary-kompatibel zu Vanilla PHP bleibt. Seit einigen Tagen setzen wir diese Erweiterung auch auf Schokokeks.org ein, vielen Dank für das Projekt. Bitte verwenden Sie den Bugtracker um uns eventuell auftauchende Probleme mitzuteilen, auch wenn mir mein Bauchgefühl sagt, dass es keine Probleme mit Suhosin geben wird. Aber so ein Bauch kann sich ja täuschen.
Sicherheitslücke in Serendipity
Tags: Blog, PHP, serendipity, WeblogDas hat man auch nicht alle Tage: Serendipity gehört wohl zu den solidesten Webapplikationen in der freien Wildbahn. Nur selten werden Sicherheitsprobleme gefunden. Nun aber ist es doch einmal vorgekommen: wie Garvin Hicking, der Maintainer von Serendipity, im Projekt-Weblog berichtet, birgt Serendipity 1.0.3 oder älter das Problem, dass sich Files vom Webserver auslesen lassen.
Bitte aktualisieren Sie Ihre Installation auf die aktuellste, stabile Version 1.0.4.
Die drei Gleichheitszeichen
Tags: PHP, securityVielleicht werden sich einige Leser schon einmal gefragt haben, warum bei Bedingungen in PHP sowohl die Syntax mit zwei als auch mit drei Gleichheitszeichen existiert. Nun, PHP kommt ja mit einem flexiblen Typsystem daher, was nichts anderes bedeutet, dass Variablen in PHP grundsätzlich nicht deklariert werden müssen und dass sie zudem »still« umgewandelt werden können. Diese stille Typumwandlung steht dem PHP-Entwickler auch in Bedingungen zu Verfügung. Sie bringt aber einige Probleme mit sich. Mit einer schlechten Abfrage ist der Entwickler nicht sicher, ob er es wirklich mit einem Integer oder gar mit einem Boolean zu tun hat, denn eine Bedingung kann für beide Typen im Zweifel wahr sein, wie wir weiter unten sehen werden. Dies sorgt für weniger Verlässlichkeit im Code und auch – im schlimmsten Fall – zu Sicherheitsproblemen.
Der Unterschied als Illustration. Hier eine Reihe von Bedingungen, die in PHP immer wahr sind:
1 == true "beliebiger string" == true 1235 == false 1.12345 == true 0.987 == true
Hatten Sie angenommen, dass ein String automatisch wahr ist oder ein Float-Typ? Erklärt ist das schnell. Wandelt man mit PHPs Cast-Funktionen einen beliebigen String in einen Boolean, so ist dieser immer wahr, selbes gilt für Floats. Wandelt man die Zahl »1« in einen Boolean, so ist dieser auch wahr. Wandelt man eine Zahl die nicht »1« ist in einen Boolean, so ist der zurückgegebene Bool'sche Wert immer unwahr. Beispiel:
(bool)1: ergibt »true«(bool)12345: ergibt »false«(bool)"beliebiger string": ergibt »true«(bool)1.2345: Ergibt immer »true«
Das Problem also: man kann sich nicht auf das doppelte Gleichheitszeichen verlassen. Die Lösung hierfür sieht ganz einfach aus: sobald man hier drei Gleichheitszeichen verwendet, versucht PHP intern nicht, die Typen zu konvertieren, sondern die beiden Variablen werden einfach nur miteinander verglichen, ohne PHPs krude automatische Magie. Das ist nicht nur ein Vorteil in punkto Verlässlichkeit, auch Geschwindigkeit wird dadurch gewonnen, denn jede Typenumwandlung kostet Resourcen und damit bares Geld. Die Syntax mit drei Gleichheitszeichen ist nicht nur weniger fehleranfällig, sondern auch noch schneller. Ein lohnenswertes kleines Zeichen mehr, würde ich sagen.
PHP 5.2 auf Schokokeks.org
Tags: PHPDie kürzlich erschienene Version 5.2 von PHP, der weit verbreiteten Scriptsprache für Webapplikationen, bringt weitreichende Verbesserungen. So fällt auf, wenn man sich das Release Announcement durchliest, dass einige sehr problematische Sicherheitslücken geschlossen wurden. So gibt es nun endlich das häufig gewünschte Feature allow_url_include. Hiermit lässt sich einstellen, ob die Builtins include und require Dateien behandeln dürfen, die nicht auf dem selben Server liegen. Die Möglichkeit, dies mit require und include tun zu können, sorgte vermutlich für die größten Sicherheitsprobleme in der PHP-Welt. Der Klassiker:
<?php require $_GET['site']; ?>
Wenn man jetzt http://example.com/index.php?site=http://example.org/bad.txt aufruft, wird http://example.org/bad.txt ausgeführt. Sehr unschön.
Dieses Feature, den Zugriff auf Remote-Dateien zu beschränken, war eigentlich für PHP 6 geplant, wurde aber aufgrund der großen Nachfrage zurückportiert.
In Zeiten des Web 2.0 wird JSON immer wichtiger. JSON ist ein Encoding-Format für Datentypen, das diese sprachübergreifend kodiert. Am häufigsten ist dabei die Verwendung in Verbindung mit JavaScript, denn die JSON-Notation entspricht exakt der JavaScript-Notation für Typen. In PHP gab es bisher eine PECL-Erweiterung, die nun aber fest mit dem PHP-Release gebündelt ist. Ein kleines Beispiel:
<?php $array = array(1, 2, 3, 4); $json = json_encode($array); ?>
Nun übergibt man die Variable $json an JavaScript, z.B. in dem man von JavaScript aus eine XmlHTTPRequest tätigt. In JavaScript ließe sich der übergebene JSON-String dann folgendermaßen weiterverarbeiten (angenommen der JSON-String befindet sich in der Variable json):
eval("array ="+json);
alert(array[0]);Das obige Beispiel gibt dann 1 aus. So einfach ist Datenaustausch zwischen Skriptsprachen. Lange Rede, kurzer Sinn: in PHP ist das JSON-Modul nun auch »mit drin«.
Zu den weiteren coolen Features in 5.2 gehört das Filter-Modul und die Möglichkeit, den Upload-Prozess einer Datei via Hooks zu verfolgen. Damit lassen sich nun sehr schicke Ladebalken für das Hochladen von Dateien erzeugen. Ein Beispiel wie es funktioniert und der Quellcode dazu.
PHP 5.2 ist ein deutlicher Fortschritt gegenüber seinen Vorgängerversionen. Und das Schönste: auf Schokokeks.org ist es schon installiert. Seit über einer Woche.



