PHP ist eine mächtige Sprache, und der Interpreter, der in einen
Webserver als Modul oder als separate CGI-Version
eingebunden werden kann, kann auf Dateien zugreifen, Befehle
ausführen und Netzwerkverbindungen zu einem Server herstellen.
Diese Eigenschaften können einen Webserver unsicher machen, wenn man
es bei den Voreinstellungen belässt.
PHP wurde besonders dafür entwickelt, um eine sicherere Sprache als
Perl oder C für die Erstellung von CGI-Programmen bereitzustellen.
Mit der richtigen Wahl der Einstellungen beim Kompilieren und
zur Laufzeit bietet PHP genau die Kombination aus Freiheit und
Sicherheit, die gerade benötigt wird.
Da es sehr viele verschiedene Möglichkeiten gibt, PHP zu nutzen,
gibt es viele Konfigurationseinstellungen, die das Verhalten von
PHP beeinflussen. Eine große Auswahl an Einstellungen garantiert,
dass man PHP für viele Zwecke einsetzen kann. Allerdings
bedeutet das auch, dass es Kombinationen gibt, die eine Installation
mit nur ungenügender Sicherheit zur Folge haben.
Die Flexibilität der Konfiguration konkurriert mit der Flexibilität
in der Programmierung. Mit PHP können komplette Server Applikationen
mit allen Möglichkeiten eines Shell Benutzers erstellt werden, oder
auch nur einfache Server Side Includes mit einem minimalen Risiko in
einer streng kontrollierten Umgebung. Wie die Umgebung erstellt wird,
und wie sicher diese ist, ist zu einem großen Teil die Sache des PHP
Entwicklers.
Dieses Kapitel beginnt mit einigen generellen Ratschlägen zur Sicherheit,
erklärt die verschiedenen Kombinationen der Konfigurationseinstellungen
und unter welchen Gegebenheiten sie sicher genutzt werden können, und
beschreibt verschiedene Überlegungen zur Programmierung für verschiedene
Sicherheitsstufen.
Allgemeine Überlegungen
Ein komplett sicheres System ist praktisch ein Ding der Unmöglichkeit,
weshalb ein unter Sicherheitsprofis oft genutzter Ansatz ist, einen
Mittelweg zwischen Risiko und Verwendbarkeit zu finden.
Wenn jede von einem Benutzer übermittelte Variable zwei Formen von
biometrischer Prüfung (wie z.B. ein Scan der Netzhaut und ein
Fingerabdruck) verlangen würde, wäre eine extrem hohe Ebene der
Verantwortlichkeit erreicht. Ein sehr komplexes Formular auszufüllen
würde auch eine halbe Stunde in Anspruch nehmen, die Benutzer dazu
ermuntern könnte, Wege zur Umgehung der Sicherheitsmaßnahmen zu suchen.
Die beste Sicherheit ist oft unaufdringlich genug um den Anforderungen
zu entsprechen, ohne den Benutzer an seiner Arbeit zu hindern oder den
Code-Autor mit übertriebener Komplexität zu überlasten. Tatsächlich
sind einige Sicherheitsangriffe nur die Folge von allzu strengen
Sicherheitsmaßnahmen, was mit der Zeit nur zu deren Unterminierung
führt.
Eine Phrase die es wert ist, sich an sie zu erinnern: Ein System ist nur
so gut wie das schwächste Glied in der Kette. Wenn alle Transaktionen
mittels Zeit, Ort, Transaktionstyp, etc. streng mitprotokolliert werden,
der Benutzer aber nur mittels einem einzigen Cookie verifiziert wird,
lässt die Zuverlässigkeit für die Bindung des Benutzers an das
Transaktions-Log bedrohlich nach.
Denken Sie während der Tests daran, dass Sie selbst für die einfachsten
Seiten nicht alle Möglichkeiten testen können. Der von Ihnen vielleicht
erwartete Input wird zu dem eines verstimmten Mitarbeiters oder eines
Crackers der Monate Zeit hat, oder einer Katze, die über die Tastatur
läuft in keinerlei Zusammenhang stehen. Deshalb betrachten Sie Ihren
Code am Besten aus der logischen Perspektive um zu erkennen, wo
unerwartete Daten eingebracht werden können und fragen sich dann,
wie diese modifiziert, reduziert, oder weiter ausgeführt werden.
Das Internet ist voll von Leuten die versuchen, sich durch
Entschlüsseln/zerstören Ihres Codes, den Zusammenbruch Ihres
Systems, Einsetzen von unangebrachten Inhalten, und anderen, Ihren
Tag interessant gestaltenden Maßnahmen, einen Namen zu machen.
Es ist egal, ob Sie eine kleine oder große Site haben, Sie sind
einfach ein Ziel wenn Sie online sind oder wenn Sie einen Server
haben, zu dem man eine Verbindung aufbauen kann. Viele
Cracker-Programme erkennen nicht die Größe, sondern durchsieben
einfach gewaltige IP Blöcke im Netz, um Opfer zu finden. Versuchen
Sie, keines zu werden.