Wenn PHP als Apache-Modul eingesetzt wird, übernimmt es die
Benutzerrechte des Apache (üblicherweise user "nobody"). Das hat
verschiedene Auswirkungen auf Sicherheit und Authentifizierung, z.B.:
Wenn Sie PHP zum Zugriff auf eine Datenbank benutzen, es sei denn
diese Datenbank hat eine integrierte Zugriffskontrolle, müssen Sie
dem Benutzer "nobody" Zugriffsrechte auf die Datenbank erteilen. Das
heißt, dass ein böswilliges Skript auch Benutzerkennung und Passwort
auf die Datenbank zugreifen, und sie verändern könnte. Es ist durchaus
möglich, dass ein Web-Spider über die Webseite eines
Datenbankadministrators stolpert, und alle Ihre Datenbanken löscht.
Sie können sich dagegen mit Apache Authentifizierung schützen, oder
ein eigenes Zugangsmodell unter Verwendung von LDAP, .htaccess Dateien,
etc. entwerfen, und diesen Code als Teil Ihrer PHP Skripte einbinden.
Es wurde festgestellt, dass wenn einmal die Sicherheitsmaßnahmen so
weit eingerichtet sind dass dem PHP User (in diesem Fall ein Apache
User) nur mehr ein geringes Risiko bleibt, PHP daran gehindert wird,
virenverseuchte Dateien in das Benutzerverzeichnis zu schreiben. Oder
vielleicht wurde es auch daran gehindert, auf Datenbanken zuzugreifen
oder diese gar zu verändern. In gleicher Weise wird auch davor
abgehalten, "gute" oder "bösartige" Dateien zu schreiben, oder "gute"
bzw. "bösartige" Datenbanktransaktionen durchzuführen.
Ein häufig gemachter Fehler in Punkto Sicherheit ist Apache Root-Rechte
zu erteilen, oder die Möglichkeiten von Apache in einer anderen Weise
auszuweiten.
Die Ausweitung der Benutzerrechte für Apache auf root ist sehr
gefährlich, und kann dem gesamten System schaden, denn mit sudo,
chroot, oder anderwärtig als root zu arbeiten sollte niemand anders
als den Sicherheitsprofis überlassen werden.
Es gibt auch ein paar einfachere Lösungen. Mit
open_basedir() können Sie
kontrollieren, welche Verzeichnisse PHP benutzen darf oder nicht. Sie
können auch einen Bereich nur für Apache einrichten, um alle
webbasierten Aktivitäten auf nicht-Benutzer- bzw. nicht-System-Dateien
einzuschränken.