Ask&Answer Sicherheitslücke

Ask&Answer ist ein beliebtes PHP-Skript von Gfx-Seiten. Bei einer Überprüfung des Skriptes (v1.5) ist mir ein kleiner, aber verheerender Fehler aufgefallen, der es mit sehr wenig Aufwand ermöglicht alles zu tun, also Löschen, Bearbeiten, etc., ohne das Passwort zu kennen. So ist es z.B. möglich als unangemeldeter Benutzer alle unbeantworteten Fragen zu sehen, indem man die Adresse /askme/answer.php?go=home aufruft. Normalerweise wird ein Browser nun einfach nach /askme/answer.php weiterleiten, denn der Benutzer ist nicht angemeldet. Dabei wird das Skript aber nicht beendet, sondern generiert und verschickt das, was eigentlich nur angemeldete Nutzer sehen sollten. So werden auch Anfragen einfach weiter verarbeitet, obwohl der Benutzer nicht autorisiert ist.

Der Fehler befindet sich in der Datei functions.php in der Funktion isLoggedIn.

function isLoggedIn() {
    if ($_SESSION['password'] == "") {
        header("Location: answer.php");
    }
}

Es wird zwar, wenn das Passwort leer ist, der Header zum Weiterleiten gesetzt, aber das Skript nicht beendet. Und so wird, da die Funktion auch keinen überprüfbaren Rückgabewert besitzt, der weitere Skriptablauf nicht geändert.

Der Code zum Beheben des Problems ist mit die (); mehr als trivial. Diese Zeile muss in der eben genannten Funktion nach der header ()-Funktion aufgerufen werden und das Problem sollte gelöst sein. Die geänderte Funktion sieht dann so aus:

function isLoggedIn() {
    if ($_SESSION['password'] == "") {
        header("Location: answer.php");
        die ();
    }
}

Leider scheint die ursprüngliche Autorin das Skript nicht mehr zu pflegen; die letzte Version 1.5 ist vom 28.6.2004 und die Domain luved.org ist auch nicht mehr erreichbar. So muss jeder Benutzer den Fehler selber ausbessern oder auf eine andere Software umsteigen. Dies wird wohl die bessere Wahl sein, denn inzwischen sind mir weitere Fehler aufgefallen. Auch das WakHosting-Skript enthält diesen Fehler.