10.03.2009, 07:57 Uhr

Variablen initialisieren

Eine Besonderheit von PHP und zugleich eine Quelle vieler Sicherheitslücken ist die Tatsache, dass Variablen nicht initialisiert werden müssen.
Eine Besonderheit von PHP und zugleich eine Quelle vieler Sicherheitslücken ist die Tatsache, dass Variablen nicht initialisiert werden müssen.
Zusammen mit Register-Globals oder auch mit einem gewollten Zugriff auf externe Daten können dadurch schnell Probleme auftreten. Wenn Sie globale Variablen einsetzen, typischerweise als Config-Variablen, sollten Sie diese in jedem Fall initialisieren. Stellen Sie sicher, dass die Variable nicht von außen manipuliert werden kann. Ein Negativbeispiel sieht etwa so aus:
<?php $GLOBALS['puffer'] .= "Etwas Text"; ?>
Wenn diese Variable nicht initialisiert wurde und dies der erste Zugriff ist, kann bei register_globals=on über test.php?puffer=evil eigener Text vorgegeben werden. Wenn Sie Dateien auslagern, stellen Sie sicher, dass diese nicht via Web aufgerufen werden können. Dies gilt auch für scheinbar harmlosen Dateien, die nur Variablen initialisieren. Tun Sie dies immer als Erstes, wenn Sie eine Datei anlegen. Eine zentrale Datei könnte beispielsweise so aussehen:
<?php
include("bib1.php");
include("bib2.php");
?>
Für bib1.php und bib2.php sollten Sie den Direktzugriff von Usern ausschließen. Das gebräuchlichste Verfahren dafür sieht so aus:
<?php
if( stristr($_SERVER['PHP_SELF'], "bib1.php") ) die("No direct access"); ?>
Die Variable PHP_Self ist aber unsicher und kann unter Umständen verändert werden. Sauberer ist es, als Konstante eine Prüfung einzubauen, wobei später nur die Konstante abgefragt wird:
<?php
define("_ISLOADED",1);
include("bib1.php");
include("bib2.php");
?>
Damit ist die Prüfung nun einfacher:
<?php
if( !defined(_ISLOADED) ) die("No direct access");
?>
Die Regel »Trauen Sie keinen Benutzereingaben« ist profan, aber gewissermaßen die Grundregel sicheren PHP-Programmierens. Gehen Sie niemals davon aus, dass Formulare und Abfragen wie gewünscht genutzt werden. Alle externen Daten sind Sicherheitsrisiken. Machen Sie keine Ausnahmen – jede Ausnahme ist ein potenzielles Risiko.



Das könnte Sie auch interessieren