PHP.ini Sicherheitsrelevante Variablen

Aus Wiki | modified eCommerce Shopsoftware
Zur Navigation springenZur Suche springen

(von iwantrock am Fr 21. Aug 2009, 12:43)

Folgende Variablen sind in der PHP.ini vorranging Sicherheitsrelevant.

allow_url_fopen
(empfohlen: off) steuert, ob Dateizugriffe auch auf externe URLs verweisen dürfen oder nicht. Verbietet man dies, fällt es einem Angreifer schwerer, Schadprogramme aus dem Internet nachzuladen. Seit PHP 5.2.0 regeltallow_url_include das Verhalten separat für die Befehle include() und require().

display_errors
(empfohlen: off) schaltet die Anzeige von PHP-Fehlermeldungen ein oder aus. Was fürs Debugging hilfreich ist, kann andererseits auch Angreifern Aufschluss über Anwendungsinterna geben, die für weitere Attacken hilfreich sind.

disable_functions
spezifiziert eine Liste von gesperrten PHP-Funktionen. Insbesondere PHP-Anwendungen, die unter Sicherheitsapekten entwickelt wurden, machen einen großen Bogen um potenziell gefährliche Funktionen wie exec(), sodass ihr Fehlen ihnen häufig keine Probleme bereitet -- vielen im Umlauf befindlichen Exploits aber sehr wohl.

open_basedir
(empfohlen: Web-Home) limitiert die Dateioperationen von PHP auf das angegebene Verzeichnis und darin enthaltene Unterverzeichnisse. Es ist möglich, mehrere Verzeichnisse mit einem Doppelpunkt getrennt anzugeben. Wichtig ist, Pfadangaben mit einem Slash zu beenden, da sie andernfalls auch alle Verzeichnisse einschließen, die mit dem angegebenen Namen beginnen.

register_globals
(empfohlen: off) steuert, ob Skripte Parameter aus der URL oder den POST-Daten als globale Variablen übergeben bekommen oder nicht. Viele Schwachstellen in PHP-Anwendungen lassen sich nur ausnutzen, wenn dies der Fall ist. (Hinweis durch xtc-supportforum Team: register_globals fällt mit PHP 6 weg)

safe_mode
(empfohlen: on) gibt an, ob PHP in einem speziellen abgesicherten Modus laufen soll oder nicht. Er hat weitreichende Auswirkungen, beispielsweise findet bei Dateioperationen ein zusätzlicher UID-Check statt und der Zugriff auf Umgebungsvariablen ist eingeschränkt. PHP6 wird ihn nicht mehr enthalten, weil die Entwickler der Ansicht sind, dass seine Funktionen nicht im Aufgabenbereich einer Skriptsprache liegen. Auf der PHP-Seite ist er umfassend dokumentiert . (Hinweis durch xtc-supportforum Team: Der safe_mode fällt mit PHP 6 weg)

sql.safe_mode
regelt eine Sonderbehandlung von Anmeldungen an 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 es System-Users übereinstimmt, kommt dort diese Option nur äußerst selten in Frage.

Quelle CT

Eine entsprechend gut gesicherte php.ini wäre somit:

   register_globals = off
   allow_url_fopen = off
   safe_mode = on
   open_basedir = <Direkter Pfad des Webverzeichnisses>
   disable_functions = exec,system,passthru,shell_exec,popen,escapeshellcmd,proc_open,proc_nice,ini_restore
   display_errors = off


Dies ist natürlich nur dann nutzbar, wenn ein direkter Zugriff auf die php.ini zum bearbeiten möglich ist. Beispielsweise bei Rootservern.