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

10 PHP intern214
10.5 Installation
Grundsätzlich haben Sie bei der Installation von PHP im Apache-
Webserver zwei Möglichkeiten:
1. Die Installation als Apache-Modul bringt bestmögliche Integra-
tion in den Webserver und das größte Featureset – aber auch ei-
nige inhärente Sicherheitsprobleme mit sich.
2. Installieren Sie PHP als CGI, können Sie PHP-Skripte besser
voneinander abschotten, riskieren aber Geschwindigkeitseinbußen
und verlieren einige Features.
Bei beiden Methoden sollten Sie folgenden Hinweis im Hinterkopf
behalten: PHP-interne Sicherheitsmaßnahmen wie Safe Mode und
open_
basedir sind von der Unterstützung jeder PHP-Extension abhängig.
Auf dieses und weitere Probleme mit dem PHP Safe Mode werden wir
später in diesem Kapitel eingehen – das viel gepriesene Allheilmittel
gegen Sicherheitsprobleme ist dieser leider nicht.
10.5.1 Installation als Apache-Modul
PHP bringt für eine ganze Reihe von Webserver-Architekturen eigene
Server APIs (SAPI) mit – unter anderem auch für jede aktuelle Apache-
Version. Die Installation auf beiden Webservern gestaltet sich unter an
Unix angelehnten Betriebssystemen weitgehend gleich. In fast allen
Fällen werden Sie PHP als Dynamic Shared Object (DSO) installieren
wollen, das gegenüber statisch in den Server kompilierten Modulen
keinen Geschwindigkeitsnachteil hat, jedoch einfacher zu konfigurie-
ren und zu warten ist, da nicht für jedes PHP-Update – und derer
waren es in den letzten Monaten einige – der Webserver neu kompiliert
werden muss.
Um PHP als Apache-Modul zu konfigurieren, muss zunächst Ihr
Webserver mit Unterstützung für dynamische Module kompiliert sein
– einen Beispielaufruf für Apaches configure-Skript finden Sie hier:
Configure-Kommando für
DSO-fähigen Apache
./configure \
--prefix=/usr/local/apache \
--sysconfdir=/etc/httpd \
--enable-suexec \
--enable-module=most \
--suexec-caller=httpd \
--server-uid=httpd \
--enable-shared=max
#/3/8#3/=:+<=+7,/3./<?=A+26./<,/8?>D>/8  B>/8=398=L83-2>
+66/,/+-2>/8./8#+0/9./
21510.5 Installation
Einen DSO-fähigen Apache-Webserver erkennen Sie einfach daran,
dass sich neben den ausführbaren Dateien
httpd, htpasswd etc. noch
das Skript
apxs im Binärverzeichnis findet – apxs ist übrigens die Kurz-
form für APache eXtenSion Tool. Dieses Skript benötigen Sie, um
dynamische Apache-Module zu kompilieren und zu installieren –
unter anderem auch PHP.
PHP selbst wird ebenfalls über das zur Quelldistribution gehö-
rende Skript
configure auf Ihrem System eingerichtet, und die notwen-
digen Extensions werden zur Kompilierung vorbereitet. Hier gilt:
Weniger ist mehr, kompilieren Sie nur die Erweiterungen ein, die Sie
wirklich benötigen. Bei Projektservern ist das natürlich leichter zu
ermitteln als auf Hosting-Rechnern, aber das Grundprinzip »Whitelist
statt Blacklist« sollten Sie auch hier im Hinterkopf behalten.
Ein typisches
configure-Kommando, das weitgehend frei von
»problematischen« Extensions ist, finden Sie hier – einer der Autoren
verwendet es unter anderem für die PHP-4-Installation auf seinen eige-
nen Servern.
Configure-Kommando für
mod_php
'./configure' \
'--with-mysql=/usr/local/mysql' \
'--with-apxs=/usr/local/apache/bin/apxs' \
'--with-gd' \
'--with-jpeg-dir' \
'--with-png-dir' \
'--with-freetype-dir' \
'--with-dom' \
'--enable-memory-limit' \
'--disable-cgi' \
'--enable-xslt' \
'--with-zlib' \
'--with-config-file-path=/etc/httpd' \
'--with-openssl'
Der für die Installation als Modul wichtigste Parameter ist --with-
apxs
, das den vollen Pfad zum apxs-Skript angibt. Dieses Skript wird
genutzt, um PHP exakt auf die gerade eingesetzte Apache-Version ein-
zustellen und alle für die Übersetzung als Apache-Modul notwendigen
Parameter zu konfigurieren. Die standardmäßig auch beim Kompilie-
ren von mod_php vorgenommene Erstellung eines CGI-Binarys kön-
nen Sie mit dem Parameter
--disable-cgi unterbinden, es wird dann
lediglich ein auf der Kommandozeile ausführbares PHP kompiliert.
Nach der Konfiguration von PHP übersetzen und installieren Sie
es wie gewohnt mit den Kommandos
make und make install – die
Installation beinhaltet auch eine Kopie der wichtigsten PEAR-Biblio-
theken.
10 PHP intern216
Durch apxs wurde das kompilierte PHP-Modul in der Apache-
Konfigurationsdatei bereits aktiviert, Sie müssen nun nur noch die pas-
senden Dateiendungen für PHP-Skripte und PHP-Quelldateien regist-
rieren:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Nach dem obligatorischen Webserver-Neustart ist PHP dann aktiviert,
und Sie können mit den Sicherungsmaßnahmen beginnen.
10.5.2 CGI
Die Übersetzung und Installation von PHP als CGI gestaltet sich
naturgemäß recht ähnlich – Sie benötigen für ein CGI-PHP das apxs-
Skript allerdings nicht und der Webserver muss nicht einmal DSO-
fähig sein. Einen wichtigen Parameter für das configure-Skript sollten
Sie jedoch nicht vergessen, um Sicherheitsprobleme zu verhindern. Die
Option
--enable-force-cgi-redirect dient dazu, einen direkten Aufruf
des PHP-Binarys z.B. über die URL oder aus Skripten heraus zu ver-
hindern – hier würden wichtige hostabhängige Einstellungen wie der
Safe Mode missachtet.
Somit sieht ein configure-String für PHP 4 als CGI folgenderma-
ßen aus:
'./configure' \
'--with-mysql=/usr/local/mysql' \
'--with-gd' \
'--with-jpeg-dir' \
'--with-png-dir' \
'--with-freetype-dir' \
'--with-dom' \
'--enable-memory-limit' \
'--disable-cgi' \
'--enable-xslt' \
'--enable-force-cgi-redirect' \
'--with-zlib' \
'--with-config-file-path=/etc/httpd' \
'--with-openssl'
Übersetzt und installiert wird das PHP-Binary wie üblich. Da kein
Apache-Modul involviert ist, müssen Sie die komplette Konfiguration
in der Datei
httpd.conf von Hand anpassen. Das ist jedoch schnell erle-
digt: Zunächst kopieren Sie das vom Installer im Pfad
/usr/local/
bin/php
abgelegte PHP-Binary in ein Verzeichnis Ihrer Wahl, das am
besten außerhalb des Dokumenten-Wurzelverzeichnisses für Ihren
Webserver bzw. die virtuellen Hosts liegt – wir verwenden hier den

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