O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

25511.2 Prinzipien hinter Suhosin
genauso aufgerufen wie die in PHP bereits enthaltenen Funktionen für
SHA-1. Ab der PHP-Version 5.1.0 steht dem Entwickler über die inte-
grierte hash-Extension die gleiche Funktionalität zur Verfügung.
Des Weiteren enthält Suhosin eine verbesserte
crypt()-Funktion,
die den Algorithmus CRYPT_BLOWFISH zur Verfügung steht. Dieser
Algorithmus ist im Standard-PHP nur auf BSD-Systemen verfügbar
11.2 Prinzipien hinter Suhosin
Suhosin hält sich an das Prinzip »delete, don’t repair«. Werden Ver-
stöße gegen das Regelwerk festgestellt, versucht es nicht, die verursa-
chende Variable zu reparieren und weiterzuarbeiten, sondern entfernt
entweder die inkriminierte Variable (bei allen Variablenfilter-Ver-
stößen) vor der weiteren Ausführung oder bricht das Skript ganz ab
(bei fast allen anderen Verstößen).
Dieses Prinzip ist – das werden Sie mittlerweile mehr als einmal
gelesen haben – das einzig richtige. Sie sollten niemals versuchen,
bereits als schlecht erkannte Daten zu reparieren, um sie womöglich
noch weiterverarbeiten zu können – zu groß ist die Gefahr, dass neben
dem bereits erkannten Problem noch weiteres Unheil in den Daten lau-
ert. Würden Sie eine virusverseuchte Datei ohne Unbehagen starten,
wenn Ihr Virenscanner behauptet, einen Virus entfernt zu haben?
Könnte er nicht einen weiteren, viel gefährlicheren Virus übersehen
haben?
11.3 Installation
Momentan ist weder der Suhosin-Patch noch die Extension Bestandteil
des Quellcodearchivs von PHP, was eine separate Installation erfor-
dert. Sie sollten aber auf jeden Fall zunächst einmal im Softwarearchiv
ihrer Linux-Distribution nach Suhosin suchen, da es mittlerweile für
fast alle Distributionen entsprechende Suhosin-Pakete gibt. Die BSD-
Systeme FreeBSD und OpenBSD aktivieren den Suhosin-Patch mittler-
weile sogar per Default, wenn man PHP mittels des Portsystems instal-
liert.
11.3.1 Installation des Patch
Um in den Genuss der Kern-Hardening-Features zu kommen, muss der
Sourcebaum einer aktuellen PHP-Version gepatcht werden. Dazu
benötigen Sie neben dem Programm »patch« natürlich auch eine
benutzbare Compilerumgebung, denn nach dem Patchen muss PHP
11 PHP-Hardening256
auch noch neu übersetzt werden. Wollen Sie lediglich die Extension
nutzen, dann können Sie diesen Abschnitt überspringen.
Als Erstes sollten Sie sich für PHP 4 oder PHP 5 entschieden
haben, denn für beide Versionen existiert (noch) je ein Patch auf der
Website des Hardened-PHP-Projektes. Das Quellarchiv entpacken Sie
wie gewohnt in den üblichen Pfad, in unserem Beispiel in
/usr/local/src. Danach sollte das Unterverzeichnis /usr/local/src/php-
x.y.z/
existieren – wechseln Sie jedoch zunächst noch nicht in dieses
Verzeichnis!
Als Nächstes besorgen Sie sich den notwendigen Patch auf der
Download-Seite
3
des Hardened-PHP-Projektes und speichern ihn unter
/usr/local/src. Da der Patch mit GZip komprimiert ist, muss er vor der
weiteren Verwendung noch entpackt werden, das erledigen Sie mit
gunzip suhosin-patch-4.4.4-0.2.6.patch.gz
Wechseln Sie nun in das PHP-Quellenverzeichnis. Jetzt wird der Patch
auf die Quellen angewandt:
patch –p 1 < ../suhosin-patch-4.4.4-0.2.6.patch
Nun sollte eine Liste der gepatchten Dateien auf dem Bildschirm
durchlaufen. Der Patch wurde erfolgreich appliziert, wenn keine Feh-
lermeldungen zu sehen sind.
Traten ein oder mehrere Fehler auf, dann erkennen Sie das an den
Meldungen während des Patchens der Quelldateien, die z.B. so ausse-
hen könnten:
Fehlermeldungen beim
Patchen der PHP-Quellen
patching file main/spprintf.c
Hunk #1 FAILED at 630.
1 out of 1 hunk FAILED -- saving rejects to file main/spprintf.c.rej
can't find file to patch at input line 3003
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -Nur php-5.0.4/sapi/apache/mod_php5.c suhosin-patch-5.0.4-
0.2.7/sapi/apache/mod_php5.c
|--- php-5.0.4/sapi/apache/mod_php5.c 2004-07-14
11:43:26.000000000 +0200
|+++ suhosin-patch-5.0.4-0.2.7/sapi/apache/mod_php5.c 2005-04-07
02:04:39.000000000 +0200
--------------------------
Hier wurde wahrscheinlich eine falsche Version des Suhosin-Patch ein-
gesetzt, d.h. die Version für PHP 4.x auf ein PHP-5-Quellverzeichnis
angewendet. Weitere mögliche Probleme können sich ergeben, falls Sie
3. http://www.hardened-php.net/download.php
25711.3 Installation
bereits andere Modifikationen an Ihren PHP-Quellen vorgenommen
haben (z.B. eine nicht im Lieferumfang enthaltene Extension mit build-
conf in Ihre PHP-Quellen integriert haben), oder falls Sie versuchen,
eine ältere Version des Suhosin-Patch in eine PHP-Ausgabe zu patchen,
die dafür nicht geeignet ist – der Suhosin-Patch ist nur bedingt auf-
wärtskompatibel!
Sollten Sie versehentlich versucht haben, Ihre PHP-Quellen mehr-
fach zu patchen, werden Sie auf eine Fehlermeldung wie die folgende
stoßen:
Fehlermeldung bei
doppeltem Patchen
-dev.patch local/src/php-5.0.4# patch -p 1 <
../suhosin-patch-5.0.4-0.2.6-
patching file TSRM/TSRM.h
Reversed (or previously applied) patch detected! Assume -R? [n]
In diesem Fall ist es ratsam, mit Strg-C den Patchprozess abzubrechen,
ein doppeltes Patchen (mit dem implizierten Parameter –R) würde ihn
nämlich rückgängig machen.
Nachdem der Patch erfolgreich angewendet wurde, haben sich
diverse Dateien verändert.
Nach dem Patchen müssen Sie PHP neu konfigurieren und über-
setzen – dazu verwenden Sie die üblichen Parameter für
configure (die
momentan von PHP benutzten Parameter finden Sie ganz oben in der
Ausgabe von
phpinfo()).
Sie benötigen für Suhosin keine configure-Switches, da alle Einstel-
lungen in der
php.ini vorgenommen werden – dazu später mehr.
Nach der Konfiguration des gepatchten PHP übersetzen Sie es wie
gewohnt mit
make, installieren Ihr mit Suhosin gepatchtes PHP mit dem
Kommando
make install und starten Ihren Webserver neu. Rufen Sie
nun
phpinfo() auf, so sollte nach erfolgreicher Installation ein weiterer
Kasten im Kopf erscheinen, der neben der Versionsnummer des Suho-
sin-Patch auch das Suhosin-Logo enthält (siehe Abb. 11–1).
Abb. 11–1
Ausgabe von Suhosin in
phpinfo()

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required