[PHP] Ich finde Sicherheitslücke nicht
Verfasst: Di 20 Apr, 2004 10:43 am
Hallo, ich brauche mal Hilfe.
Um in einem Umfragetool einigermassen realistische Ergebnisse zu erzielen, wird die IP des Teilnehmers sowie dessen Session-ID, die vom Tool automatisch generiert wird in der Datenbank mit abgespeichert. Das Tool prüft dann, ob in den letzten X Sekunden ( X kann eingestellt werden ) bereits ein Abstimmungsergebnis mit der IP des aktuellen Besuchers oder der SessionID des aktuellen Users vorhanden ist. Wenn ja, wird das aktuelle Ergebnis angezeigt und eine Abstimmung wird nicht zugelassen, wenn nicht, kann der User abstimmen.
Bei mir klappt das auch einwandfrei, nur gibt es einen User, der das irgendwie schafft zu umgehen, da ich heute zwischen 0:25 und 0:30 Uhr 42 Abstimmungsergebnisse des Users in der Datenbank hatte. Alle 42 hatten dieselbe IP und dieselbe Session-ID. Und ich weiss nicht, wie er das System umgeht, weil wie gesagt ich beim Testen selbst mit dauerhaftem Drücken von F5 nicht mehr wie ein Ergebnis in die DB eingetragen bekomme.
Hier der Code-Teil mit der Abfrage, ob der User bereits abgestimmt hat:
Ich selber kann das nicht umgehen und bin daher vollkommen ratlos, wie das überhaupt passieren kann. Hat jemand vielleicht Ideen für mich, wonach ich suchen muss?
Danke im Voraus
Frank-Andre
P.S. Pro registriertem user nur eine Abstimmung geht nicht, da die Umfragen unter allen Besuchern laufen soll!
Um in einem Umfragetool einigermassen realistische Ergebnisse zu erzielen, wird die IP des Teilnehmers sowie dessen Session-ID, die vom Tool automatisch generiert wird in der Datenbank mit abgespeichert. Das Tool prüft dann, ob in den letzten X Sekunden ( X kann eingestellt werden ) bereits ein Abstimmungsergebnis mit der IP des aktuellen Besuchers oder der SessionID des aktuellen Users vorhanden ist. Wenn ja, wird das aktuelle Ergebnis angezeigt und eine Abstimmung wird nicht zugelassen, wenn nicht, kann der User abstimmen.
Bei mir klappt das auch einwandfrei, nur gibt es einen User, der das irgendwie schafft zu umgehen, da ich heute zwischen 0:25 und 0:30 Uhr 42 Abstimmungsergebnisse des Users in der Datenbank hatte. Alle 42 hatten dieselbe IP und dieselbe Session-ID. Und ich weiss nicht, wie er das System umgeht, weil wie gesagt ich beim Testen selbst mit dauerhaftem Drücken von F5 nicht mehr wie ein Ergebnis in die DB eingetragen bekomme.
Hier der Code-Teil mit der Abfrage, ob der User bereits abgestimmt hat:
Code: Alles auswählen
$sql2 ="SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp' ) AND zeit > NOW()-".$cfg[sperrzeit];
if( ($result = $db->sql_query($sql2)) )
{
$r = $db->sql_fetchrow($result);
if($r[0] > 0)
{ $u_action = "result"; }
}
Danke im Voraus
Frank-Andre
P.S. Pro registriertem user nur eine Abstimmung geht nicht, da die Umfragen unter allen Besuchern laufen soll!