f-thies.de Foren-Übersicht
 Portal  •  FAQ •  Suchen •  Einstellungen  • Benutzergruppen  • Registrieren  • Profil  • Einloggen, um private Nachrichten zu lesen  • Login
Kalender 
Nächstes Thema anzeigen
Vorheriges Thema anzeigen

Neues Thema eröffnenNeue Antwort erstellen Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen
Autor Nachricht
Thies
Webmaster
Webmaster


Alter: 43
Anmeldungsdatum: 04.08.2003
Beiträge: 1424
Wohnort: Thüringen
blank.gif
BeitragVerfasst: Di 20 Apr, 2004 11:43 am  Titel:  [PHP] Ich finde Sicherheitslücke nicht Antworten mit ZitatNach untenNach oben

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:

Code:
               $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";  }
         }

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!

_________________
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }


Image

Schütze Geschlecht:Männlich Affe OfflinePersönliche Galerie von ThiesBenutzer-Profile anzeigenPrivate Nachricht sendenE-Mail sendenWebsite dieses Benutzers besuchen
Google







Verfasst:   Titel: Sponsored Link Nach untenNach oben



  
Thies
Webmaster
Webmaster


Alter: 43
Anmeldungsdatum: 04.08.2003
Beiträge: 1424
Wohnort: Thüringen
blank.gif
BeitragVerfasst: Mi 21 Apr, 2004 11:53 am  Titel:  (Kein Titel) Antworten mit ZitatNach untenNach oben

Hi,

ich habe durch Zufall heute nacht herausgefunden, was passiert ist. Es geht um die Query:

SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp' ) AND zeit > NOW()-".$cfg[sperrzeit]

und dort insbesondere um den Part

zeit > NOW()-".$cfg[sperrzeit]

Zeit ist ein timestamp-Feld und mit dieser Abfrage wird geprüft, ob innerhalb der Sperrzeit der User mit der IP / Session-ID bereits gevotet hat. Das klappt tagsüber auch einwandfrei. Ich hätte mich ja bereits wundern müssen, dass die Mehrfachvotes eines Users immer in der Zeit zwischen 0:15 und 0:30 Uhr passierten. Und heute nacht bin ich um diese Zeit online und stelle fest, dass auch ich auf einmal sooft voten kann, wie ich möchte. Ich habe nun die Zeitabfrage nicht mehr direkt in der Query ermittelt, sondern folgendermassen geändert:

Code:
$check_time = time() - $cfg[sperrzeit];
$check_time2 = strftime("%Y%m%d%H%M%S",$check_time);
$sql2 ="SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp') AND zeit > " . $check_time2;
Und siehe da, der Bug ist behoben!!!!

Bin froh, dass ich heute nacht online war, sonst hätte ich wohl noch ewig gesucht. Wobei ich noch nicht so richtig verstehe, warum der vorherige Code mal ging und nach Mitternach nicht ...... Confused

Frank-Andre

_________________
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }


Image

Schütze Geschlecht:Männlich Affe OfflinePersönliche Galerie von ThiesBenutzer-Profile anzeigenPrivate Nachricht sendenE-Mail sendenWebsite dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen


Alle Zeiten sind GMT + 1 Stunde

Forensicherheit

2510 Angriffe abgewehrt
Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods und Credits

www.jamba.at - Klingeltoene Logos Handyspiele
Sichern Sie sich jetzt alle 64 Spiele der FIFA WM 2006 für einmalig nur 49 EUR!