Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 2. 7. 2010, 14:28:07
Pro anketu chci povolit hlasování po 30 dnech. Napadla mě kombinace cookies, IP adresy, prohlížeče a času posledního hlasování. Podstatné části kódu jsou zde:
<?php $time_limit = (60*60*24*30); // 30 dní // procedura uložení cookie SetCookie("hlasoval", "ano", Time()+$time_limit); // procedura uložení do databáze $sql1 = "INSERT INTO $table_hlasovali SET ip='".$_SERVER['REMOTE_ADDR']."', browser='".$SERVER['HTTP_USER_AGENT']."', vote_time=NOW()"; // kontrola $sql2 = "SELECT * FROM $table_hlasovali WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND browser='".$SERVER['HTTP_USER_AGENT']."' AND (UNIX_TIMESTAMP(vote_time)+".$time_limit.") > ".Time(); $dotaz2 = mysql_query($sql2); $pocet_hlasovani = mysql_num_rows($dotaz2); if ($_COOKIE['hlasoval'] == "ano" || $pocet_hlasovani > 0) { // znemožním hlasování } else { // povolím hlasování } ?> Žádné vygůglené řešení mi nepřišlo dost neprůstřelné. |
||
Kajman_ Profil * |
#2 · Zasláno: 2. 7. 2010, 14:41:15
Stačí při každém požadavku změnit user agenta a můžu hlasovat kolikráte chci. Třeba by se dalo omezit nějakým limitem i hlasování z jedné ip s různými user agenty.
Osobně bych si asi ukládal do jedné tabulky parametry prohlížeče a ip včetně toho hlasování. Když budete chtít někdy ručně vyřadit podezřelé hlasování, tak v logovací tabulce budete vědět, kolik máte nesmyslných hlasů, ale nebude vědět, pro co hlasovaly. |
||
mackopu Profil |
#3 · Zasláno: 2. 7. 2010, 14:49:23
Kajman:
No, nevím. Zaprvé by to předpokládalo vypnutí nebo vymazání cookies ve všech mých prohlížečích a zadruhé bych pak mohl hlasovat jen tolikrát, kolik mám prohlížečů (což by tolik nevadilo). Nebo se pletu? |
||
Kajman_ Profil * |
#4 · Zasláno: 2. 7. 2010, 14:54:47
Jsou nástroje, které umí měnit user_agenta, takže hlasování z jednoho prohlížeče nemusí být jen jedno.
|
||
mackopu Profil |
#5 · Zasláno: 2. 7. 2010, 15:04:29
To je pravda, i když se v podobných praktikách nevyznám (často mě ale napadá, že bych je chtěl ovládat proto, abych se proti nim mohl účinně bránit). Na druhou stranu také existují IP anonymizery...
Řekněme ale, že tabulky z nějakého důvodu slučovat nechci. Jak by pak vypadal dotaz, který by limitoval hlasování z jedné ip s různými user agenty? Nebo se snad dokonale (či co nejlépe) chráněná anketa napsat nedá? Musí přece existovat nějaké optimální řešení. Díky za každou pomoc. |
||
Mastodont Profil |
#6 · Zasláno: 2. 7. 2010, 15:45:40
"Dokonale" chráněná anketa je možná v případě, kdy necháš hlasovat jen registrované a přihlášené lidi.
|
||
Kajman_ Profil * |
#7 · Zasláno: 3. 7. 2010, 13:12:37
mackopu:
„Jak by pak vypadal dotaz, který by limitoval hlasování z jedné ip s různými user agenty?“ $sql3 = "SELECT count(*) pocet FROM $table_hlasovali WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND vote_time > date_sub(now(),$time_limit second)"; |
||
Kcko Profil |
#8 · Zasláno: 3. 7. 2010, 13:47:08
mackopu, nebud paranoidni, koho by bavilo hlasovat treba 50x do jedne ankety. Nebo to jsou ankety, ktere rozhoduji o nejakych extremne dulezitych vecech?
|
||
mackopu Profil |
#9 · Zasláno: 3. 7. 2010, 14:46:04
Mastodont:
Pochopitelně, jak jinak :-) Kajman: Díky. Prosté. Kcko: To není paranoia, to je stihomam :-) Ale vážně - k čemu polovičaté řešení, když by se to mohlo dotáhnout do optima, ne? |
||
Kcko Profil |
#10 · Zasláno: 3. 7. 2010, 14:53:19
mackopu:
Do optima? Zivot je docela kratky abys vse dotahoval do optima :) Musis najit rozumny kompromis mezi kvalitou a casovosti. |
||
Časová prodleva: 14 let
|
0