Gefährliche Funktionen und Variablen in PHP
In PHP-Anwendungen können sehr schnell Sicherheitslücken entstehen. Diese entstehen häufig durch ungefilterte Benutzereingaben. Wenn Benutzereingaben in bestimmten Funktionen verwendet werden, um zum Beispiel Dateien einzulesen, Dateien einzubinden oder sogar System-Befehle auszuführen, ist es besonders kritisch.
Ich habe mal eine Liste mit einigen Funktionen und Variablen zusammengestellt, auf die PHP-Programmierer besonders achten sollten.
Superglobale Arrays
Benutzereingaben werden meistens in sogenannte Superglobals (auch superglobale Variablen genannt) gespeichert. Diese vordefinierten Variablen liegen wiederum in Arrays (Felder) - diese werden als superglobale Arrays bezeichnet.
Vereinfacht ausgedrückt kann man sagen, dass Benutzereingaben in Platzhalter gespeichert werden. In einem Suchformular könnte das z.B. so aussehen:
Suchformular » Benutzereingabe "test" » Platzhalter xy (enthält den Wert "test")
Am häufigsten werden folgende superglobale Arrays für Benutzereingaben verwendet:
$_GET, $_POST / $_REQUEST
In $_GET werden die Werte per URL-Parameter übergeben.
In $_POST werden Werte per POST-Methode übergeben (z.B. Formulareingaben).
$_REQUEST enthält den Inhalt von $_GET, $_POST und $_COOKIE
Doch nur auf $_GET, $_POST, $_REQUEST und $_COOKIE zu achten ist ein Fehler, der leider sehr oft gemacht wird.
Benutzereingaben sind nicht immer vorhersehbare Benutzereingaben. Angreifer halten sich nicht an die “Bitte alle Felder korrekt ausfüllen” Regel.
Auch bestimmte Daten im superglobalen $_SERVER Array können manipuliert werden. Zum Beispiel wird in $_SERVER['HTTP_USER_AGENT'] der User-Agent gespeichert. Diesen kann man in den Browser Einstellungen beliebig ändern.
Variablen / Arrays auf die man besonders achten sollte
- $_GET
- $HTTP_GET_VARS
- $_POST
- $HTTP_POST_VARS
- $_COOKIE
- $HTTP_COOKIE_VARS
- $_REQUEST
- $_FILES
- $HTTP_POST_FILES
- $_SERVER['REQUEST_METHOD']
- $_SERVER['QUERY_STRING']
- $_SERVER['REQUEST_URI']
- $_SERVER['HTTP_ACCEPT']
- $_SERVER['HTTP_ACCEPT_CHARSET']
- $_SERVER['HTTP_ACCEPT_ENCODING']
- $_SERVER['HTTP_ACCEPT_LANGUAGE']
- $_SERVER['HTTP_CONNECTION']
- $_SERVER['HTTP_HOST']
- $_SERVER['HTTP_REFERER']
- $_SERVER['HTTP_USER_AGENT']
- $_SERVER['HTTP_X_FORWARDED_FOR'];
- $_SERVER['PHP_SELF']
Potenziell gefährliche Funktionen
Diese Variablen / Arrays werden natürlich oft in Funktionen verwendet. Wenn man sie nicht validiert bzw. filtert, können kritische Sicherheitslücken entstehen.
Funktionen für den Dateizugriff:
- fopen
- readfile
- file
- fpassthru
- gzfile
- gzopen
- gzpassthru
- readgzfile
- file_get_contents
- file_put_contents
- copy
- rename
- rmdir
- mkdir
- unlink
- parse_ini_file
Funktionen zum Ausführen von Code und Befehlen:
- exec
- shell_exec
- system
- passthru
- eval
- popen
- proc_open
- call_user_func
- call_user_func_array
- call_user_method
- call_user_method_array
- create_function
Ausserdem ist hier auch der Backtick-Operator zu beachten.
Funktionen zum Einbinden von Dateien:
- include
- include_once
- require
- require_once
- virtual
Socket Funktionen:
- fsockopen
- pfsockopen
- socket_create
- socket_connect
- socket_write
- socket_send
- socket_recv
Funktionen für Weiterleitungen:
- header
- http_redirect
- HttpMessage::setHeaders
- HttpMessage::setResponseCode
Funktionen für SQL-Abfragen:
- mysql_query
- mssql_query
- pg_query
Funktionen zur Entschlüsselung:
- urldecode
Wem noch mehr einfallen, kann dies gerne per Kommentar mitteilen.

