echo $begrüßung;
auf Sicherheitslücken und register_globals wurdest Du bereits hingewiesen.
Prinzipiell ist register_globals keine Sicherheitslücke. Die Sicherheitslücke entsteht, weil einige Programmierer beim Variablenzugriff schlampig sind. Es wird oftmals - sicher aus Unwissenheit - vergessen, Variablen vor dem ersten Lesezugriff mit einem definierten Wert zu füllen. Machte man dies konsequent, müsste sich register_globals=On nicht immer wieder als Sicherheitslücke bezeichnen lassen.
PHP erzeugt bei Lesezugriff auf nicht vorhandene Variablen zwar eine Notice, doch die Anzeige dieser Meldungen ist per default ausgeschaltet. Während der Entwicklung ist es sehr empfehlenswert, das error_reporting aus E_ALL zu stellen, um diese wichtigen Meldungen nicht zu ignorieren. Auch ist die Chance geringer, Vertipper bei Variablennamen zu übersehen.
Ändere die Abfrage so:
Das ist doch nur die halbe Wahrheit, die nun dafür sorgt, dass die Sicherheitslücke auch funktioniert.
Es ist besser, die übergebenen Werte auf Gültigkeit zu prüfen. Erwartet man Zahlen, testet man, ob es sich um eine solche handelt, usw. Hilfreiche Funktionen dazu findet man im Kapitel Variable Handling Functions.
Möchte man auf einen String-Wert aus einer Reihe vorgegebener Werte testen (wobei die Vorgabe sich hier aus den zur Verfügung stehenden Seiten ergibt), kann man ein Array verwenden:
$contents = array(
'start' => 'start.php',
'irgendwas' => 'irgendwas.php',
...);
Der Schlüssel ist der Wert, der in der URL übergeben wird. Der Inhalt dazu stellt den Dateinamen dar.
if (isset($_GET['content']) and isset($contents[$_GET['content']])
$filename = $contents[$_GET['content']];
else
$filename = $contents['start'];
Hier wird nun geprüft, ob überhaupt ein Parameter namens content übergeben wurde und ob dieser als Key im Array enthalten ist. Wenn nicht, wird ein $filename mit einem Default-Wert belegt.
echo "$verabschiedung $name";