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.

Dir hat der Artikel gefallen? Dann abonniere doch einfach den RSS-Feed, damit du immer auf dem Laufenden bleibst und über neue Einträge kostenlos informiert wirst.

Diesen Artikel weiterempfehlen:
TwitterFacebookDeliciousTechnoratiMister WongWikio

Eine Reaktion zu “Gefährliche Funktionen und Variablen in PHP”

Kommentare (0)

Für diesen Artikel sind bisher nur Trackbacks vorhanden.

Kommentar hinterlassen