Gestern las ich in meinem schlauen PHP-Buch, dass es möglich ist, in eine Variable einen String zu speichern, und diesen dann als Funktion aufzurufen.
Nun ist diese Sache ganz nett, kann aber zu einem Sicherheitsrisiko werden.
Ein Beispielcode sieht folgendermaßen aus, bei dem die Variablenfunktion ordnungsgemäß funktioniert:
function myecho() {
echo "Variablenfunktion ausgefuehrt";
}
$function="myecho";
$function();
Man fügt an die zuvor definierte Variable einfach die Klammern an, und die Funktion wird daraufhin aufgerufen.
Ausgenutzt werden könnte, das bei einem solchen Quelltext:
<?php
function myecho() {
echo "Funktion aufgerufen";
}
$function=$_GET['func'];
$function();
?>
Dabei wird der String des GET-Parameters “func” in der Variable $function abgelegt und dann als Funktion aufgerufen. Dies führt zu einem Problem, wenn ein potentieller Angreifer folgende URL aufrufen würde:
function.php?func=phpinfo
Dann wird der String “phpinfo” in die Variable abgelegt und anschließend ausgeführt, da diese Funktion in PHP zum Ausgeben sensibler Daten über den Webserver existiert.
Deswegen ist es wichtig, sich gegen solche Angriffe zu schützen, in dem man z.B. ein Switch nutzt, um nur bestimmte Funktionen ausführen zu lassen. Der Code würde dann folgendermaßen aussehen:
<?php
function myecho() {
echo "Funktion aufgerufen";
}
switch($_GET['func']) {
case "myecho":
$function="myecho";
break;
default:
$function="myecho";
}
$function();
?>
Gruß
gehaxelt