phpbar.de logo

Mailinglisten-Archive

[php] Sicherheitsfragen zu einem Quiz mit Zeitlimit in PHP

[php] Sicherheitsfragen zu einem Quiz mit Zeitlimit in PHP

Oliver Richter Hypergrip at gmx.de
Mit Dez 17 18:43:27 CET 2003


Hallo Liste.

Ich versuche grade, ein Gewinnspiel in PHP zu realisieren. Die Fragen sind in einem einfachen Multiple-Choise Formular untergebracht. Die Teilnahme am Quiz ist nur Mitgliedern einer bestimmten Community möglich. Der Verlauf des Quiz soll folgendermaßen realisiert werden:

- User meldet sich mit seinem Community-Login an.
- Die Seite mit den Fragen wird angezeigt.
- Nach einer bestimmten Zeit (15 Min) oder wenn der User den "Fertig"-Button anklickt wird die Auswertung gestartet und die Punktzahl gespeichert.

Natürlich versuche ich, den "Kandidaten" möglichst keine Chance zum Mogeln zu geben. Zwar kann ich nicht verhindern, dass ein User die Fragen weitergibt und ein anderer dann im Voraus die Antworten nachliest, aber zumindest dem einzelnen Benutzer an sich soll es im Idealfall nicht möglich sein, zu schummeln.
Im Augenblick sieht das "Sicherheits-Konzept" folgendermaßen aus (Anmerkung: da die Community-Seite Cookies voraussetzt, benutze ich diese auch für das Quiz):

1.) Der User meldet sich an und bekommt die Möglichkeit, am Quiz teilzunehmen, falls für ihn noch kein Punktestand in der Datenbank gespeichert ist.

2.) Klickt der User auf der Link für das Quiz, kommt er auf eine kleine Info-Seite, auf der er darauf hingewiesen wird, dass er nur einen Versuch hat und dass dieser Versuch auf Zeit läuft.
Es wird ein Cookie gesetzt mit dem Wert 1 ("vor dem Quiz").

3.) Mit dem "Start"-Button gelangt der User zum eigentlichen Formular (quiz.php).
Als erstes auf dieser Seite steht eine Abfrage nach dem Cookie: Hat es den Wert 1, wird es auf 2 ("am Quiz teilgenommen") gesetzt und das Formular wird angezeigt; Hat es den Wert 2, wird die Auswertung gestartet und das Ergebniss in die Datenbank eingetragen. Die soll versuchen, den User daran zu hindern, das Formular ein weiteres mal aufzurufen. Wer also das Formular aufruft, sich die Fragen merkt/notiert, sich die Antworten raussucht und das Formular dann ausfüllen will, landet direkt bei der Auswertung und erhällt somit keine Punkte. Der "Timer" ist mit einem einfachen meta refresh realisiert.

4.) die quiz.php wird wieder aufgerufen, diesmal mit dem Wert 2 im Cookie. Es wird geprüft, ob für den User schon ein Punktestand gespeichert ist, falls nicht, werden die Punkte eingetragen.

Dieses Konzept ist nicht nur in wenigen Minuten entstanden, sondern wohl auch voller "Löcher". Sicher sind die Cookies eines davon, aber ich galube auch, dass man den Timer leicht austricksen kann, bin mir aber nicht sicher.
Es wäre sehr hilfreich, wenn ihr mir die möglichen Schwachstellen aufzeigen und am besten einen Weg es besser zu realisieren zeigen könntet.

Vielen Dank im Vorraus

Oliver 

php::bar PHP Wiki   -   Listenarchive