Die wichtigsten Sicherheitsoptionen in der php.ini
register_global = off verchindert, dass Varablenzuweisungen in HTTP-Anfrage und Cookies globale Programmvariablen überschreiben. Diese Option zwingt Skripte dazu, von Anwenderseite übermittelte Variable über gesonderte Arrays wie $_REQUEST bewusst abzuholen. Ein Angreifer kann es dadurch nicht mehr ohne weiteres ausnutzen, falls ein Skript uninitialisierte Variablen verwendet oder leichtfertig von bestimmten globalen Vorbelegungen ausgeht.
allow_url_fopen = off sorgt dafür, dass PHP-Skript nur lokale Dateien des Servers einbinden können. Dies ist eine besondere Hürde für viele Angriffstypen, da keine Skripte mehr direkt von externen Servern nachgeladen werden können.
safe-mode = on bewirkt unter anderem, das der PHP-Prozess Verzeichnisse zugreifen darf, die dem Nutzer gehören, mit dessen Rechtender PHP- Prozess läuft. Auf Linux-Servern ist dies meist www-data beziehungsweise beim Einsatz von Apache-Modulen wie mod_suexec oder suPHP der Skriptbesitzer. Außerdem sperrt der Safe-Mode in seiner Defaut-Einstellung gefärliche Funktionen wie shell_exec(), doch sein Verhalten lässt sich durch weitere Optionen steuern [1].
open_basedir = /pfad/zum/www-ordner legt ein Verzeichnis fest, außerhalb dessen PHP-Skripte keine Dateien öffnen können-ähnlich eine chroot-Umgebung. Der Zugriff auf enthaltene Unterordner ist natürlich gestattet, doch das direkte Auslesen beispielsweise von /etc/passwd und anderen vertraulichen Daten außerhalb des WWW-Root durch Path Traversal ist damit nicht mehr möglich.
display_errors = off erschwert unter Umständen die Vorbereitung eines Angriffs. Für einige Attacken ist es beispielsweise nötig, dass der Dateisystempfad zur Webapplikation bekannt ist. Diese Information lässt sich unter anderem vielen PHP-Fehlermeldungen entnehmen. Die Option verhindert, dass Angreifer gezielt Fehlermeldungen provozieren können.
magic_quotes_gpc = on escaped alle Single-quotes (‘), Double quotes (‘), Backslashes (\) und NULL-Zeichen automatisch mit einem Backslash. Teilweise lassen sich damit SQL-Injection-Angriffe verhindern, allerdings gibt es Möglichkeiten, diese Beschränkung zu umgehen. Zudem funktionieren einige Anwendungen mit dieser Option nicht.
disable_functions spezifiziert eine Liste von gesperrten PHP-Funktionen. Insbesondere PHP-Anwendungen, die unter Sicherheitsaspekten entwickelt wurden, machen einen großen Bogen um potenziell gefährliche Funktionen wie exec(), sodass ihr Fehlen ihnen häufig keine Probleme bereitetvielen im Umlauf befindlichen Exploits aber sehr wohl.
sql.safe_mode regelt eine Sonderbehandlung von Anmeldungen Datenbankservern. In diesem Modus verwenden die PHP-Funktionen zur Datenbankanmeldung ausschließlich den Namen des System-Users, dem das Skript gehört. Da in Shared-Webhosting-Umgebungen der Name des Datenbanknutzers fast nie mit dem des System-Users übereinstimmt, kommt dort diese Option nur äußerst selten in Fragen.
