Sikre afstemninger

Tags:    php mysql

På et website jeg udvikler på nu, er det et krav, at afstemninger er sikre, anonyme og at der samtidig kun kan stemmes én gang.

Da alle brugere er registreret, kan der checkes på der member_id, så det er ikke nødvendigt at checke på cookies, IP-adresser eller andre ting. Sitet benytter SSL ved afstemningerne.

Samtidig er det dog er krav, at databasen ikke skal vide, hvad brugeren har stemt - blot at medlemmet har stemt. Men det skal være muligt for brugeren at verificere - når afstemningen er slut - at alt er gået korrekt til.

Den måde jeg har implementeret det på indtil videre er følgende:

2 tabeller:

pt_voters: voters_id, entry_id, member_id, ip_address
pt_votes: votes_id, entry_id, vote, vote_time

Dvs pt_voters viser, om brugeren har stemt i afstemningen, der defineres ved entry_id. Og pt_votes viser, hvad der er stemt.

Fold kodeboks ind/udPHP kode 


Koden er simplificeret lidt, da der også er checks på, om de tilfældige IDs eksisterer i tabellen i forvejen og lignende.

Mit spørgsmål er: Er det sikkert? Eller er det muligt at finde frem til, hvad en given bruger har stemt?



Indlæg senest redigeret d. 30.11.2011 09:05 af Bruger #16897
2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Ud fra de informationer du opstiller ser jeg ikke umiddelbart nogen mulighed for at kunne finde frem til hvad en given bruger har stemt.

Men...
Det ville være muligt at kunne sammendrage brugeres online tidspunkt og deres vote_time. Dette gælder såfremt at du enten registrere login-entries i separate rækker eller hvis brugeren kun har været online een gang i løbet af dagen.



Ja, Michael, det har du jo ret i. Jeg registrerer faktisk brugers sidste login-tidspunkt for at finde nye ting siden sidste login. Hmmm, så kan jeg selvfølgelig droppe vote_time, som jeg registrerer af andre sikkerhedsårsager sammen med IP-adressen.

Hmm. Det er jo nok ikke engang helt nok bare at droppe vote_time, for hvis nogen (eller bare mig) får adgang til Apache-logs, så kan de se tiden der alligevel.



t