Votare multipla pe web
Moderatori: coditza, Emil, Moderatori
- dducu
- PHPRomania Supporter
- Mesaje: 16
- Membru din: Mie Noi 17, 2004 10:55 am
- Localitate: Iasi
- Contact:
Votare multipla pe web
Are cineva idei despre niste "metode tehnologice" cat mai noi care sa impiedice votarea multipla pe web (in cadrul unui sondaj) in conditiile pastrarii anonimicitatii voturilor?
Optiuni cum ar fi oprirea pentru o anumita perioada de timp a voturilor ce vin de la un anumit ip de la care s-a votat sunt excluse (de preferat).
Optiuni cum ar fi oprirea pentru o anumita perioada de timp a voturilor ce vin de la un anumit ip de la care s-a votat sunt excluse (de preferat).
- Birkoff
- Senior Member
- Mesaje: 6380
- Membru din: Joi Mar 18, 2004 2:34 pm
- Localitate: Bucuresti
- Contact:
Nici o metoda nu e 100% sigura.
Cea mai folosita este dupa ip, dar daca e la un internet cafe de exemplu unde toate pc-urile de acolo ies pe net printrun singur ip e mai complicat se blocheaza ip-ul si orice pc de acolo nu mai are drept de vot ...
A doua ar fi cu sesiuni, astfel ca dupa inchiderea browserului sesiunile dispar si se poate vota din nou...
A treia ar fi cu cookie dar e ceva intre prima si a doua metoda... are avantaje si dezavantaje...
Alte optiuni nu mai stiu, decat combinatii intre astea 3
Cea mai folosita este dupa ip, dar daca e la un internet cafe de exemplu unde toate pc-urile de acolo ies pe net printrun singur ip e mai complicat se blocheaza ip-ul si orice pc de acolo nu mai are drept de vot ...
A doua ar fi cu sesiuni, astfel ca dupa inchiderea browserului sesiunile dispar si se poate vota din nou...
A treia ar fi cu cookie dar e ceva intre prima si a doua metoda... are avantaje si dezavantaje...
Alte optiuni nu mai stiu, decat combinatii intre astea 3
1) )
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
- dducu
- PHPRomania Supporter
- Mesaje: 16
- Membru din: Mie Noi 17, 2004 10:55 am
- Localitate: Iasi
- Contact:
Votare multipla pe web
Ideea e ca nu am cum folosi metoda "dupa ip" pt. ca sondajul pe care il fac se va adresa (in special) unei retelede unde toate pc-urile ies intr-adevar prin acelasi ip pe net.
M-am gandit eu la cookie, dar problema e ca nu prea reusesc sa-i manipulez intocmai cum vreau eu..., iar daca un browser nu accepta cookie...
Oricum, astept in continuare idei.
M-am gandit eu la cookie, dar problema e ca nu prea reusesc sa-i manipulez intocmai cum vreau eu..., iar daca un browser nu accepta cookie...
Oricum, astept in continuare idei.
Before doing something perfect, do something perfectible!
- Birkoff
- Senior Member
- Mesaje: 6380
- Membru din: Joi Mar 18, 2004 2:34 pm
- Localitate: Bucuresti
- Contact:
Ar mai fi o solutie dupa timp.
Adica cand salvezi votul in bd salvezi intr-o tabela si ip si time si la urmatorul vot verifici daca au trecut mai mult de x minute de cand ip-ul respectiv a votat ultima data. - daca da atunci salvezi noul vot daca nu atunci il ignori...
Eventual combini cu variabile de sesiune ca sa fie mai sigur (trimiti in bd si id-ul sesiuni etc...)
Adica cand salvezi votul in bd salvezi intr-o tabela si ip si time si la urmatorul vot verifici daca au trecut mai mult de x minute de cand ip-ul respectiv a votat ultima data. - daca da atunci salvezi noul vot daca nu atunci il ignori...
Eventual combini cu variabile de sesiune ca sa fie mai sigur (trimiti in bd si id-ul sesiuni etc...)
1) )
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
2)
3) (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.
Problema se reduce la identificarea celui care voteaza.
Iar asta se poate face fie folosind un sistem de autentificare user-password (si, in cazul asta, va trebui ca votul sa fie agregat "anonim" cu restul de voturi... ie. sa nu se memoreze votul in sine ci doar sa se adauge la un contor de voturi si sa se marcheze ca user-ul X a votat deja pentru poll-ul Y).
Alta metoda (dar asta e aplicabila numai daca se stie apriori cine va trebui sa voteze) este sa generezi un token unic pentru fiecare posibil votant -md5(unqid())-, token pe care il trimiti posibilului votant - email-, iar fiecare token sa aiba voie sa voteze o singura data. In cazul asta trebuie sa te asiguri ca unui posibil votant i se genereaza o singura data un token (ceva de genul: un table in care se marcheaza ca pentru adresa de mail X s-a generat deja token, si sa nu se genereze a doua oara).
Evident, la modul general, niciuna din aceste metode nu e 100% sigura (cineva poate folosi 10 adrese de mail, se poate inregistra cu 10 useri, etc/etc). Poti reduce probabilitatea de frauda folosind cookie-uri sau identificare dupa adresa IP (ie. sa nu permiti votarea de mai multe ori de pe acelasi calculator, etc/etc).
Dar, repet, la modul general nu exista metode 100% sigure.
Numa' bune.
Iar asta se poate face fie folosind un sistem de autentificare user-password (si, in cazul asta, va trebui ca votul sa fie agregat "anonim" cu restul de voturi... ie. sa nu se memoreze votul in sine ci doar sa se adauge la un contor de voturi si sa se marcheze ca user-ul X a votat deja pentru poll-ul Y).
Alta metoda (dar asta e aplicabila numai daca se stie apriori cine va trebui sa voteze) este sa generezi un token unic pentru fiecare posibil votant -md5(unqid())-, token pe care il trimiti posibilului votant - email-, iar fiecare token sa aiba voie sa voteze o singura data. In cazul asta trebuie sa te asiguri ca unui posibil votant i se genereaza o singura data un token (ceva de genul: un table in care se marcheaza ca pentru adresa de mail X s-a generat deja token, si sa nu se genereze a doua oara).
Evident, la modul general, niciuna din aceste metode nu e 100% sigura (cineva poate folosi 10 adrese de mail, se poate inregistra cu 10 useri, etc/etc). Poti reduce probabilitatea de frauda folosind cookie-uri sau identificare dupa adresa IP (ie. sa nu permiti votarea de mai multe ori de pe acelasi calculator, etc/etc).
Dar, repet, la modul general nu exista metode 100% sigure.
Numa' bune.
People ask for criticism, but they only want praise.
W. Somerset Maugham (1874 - 1965).
http://www.arond-design.ro
W. Somerset Maugham (1874 - 1965).
http://www.arond-design.ro
$_SERVER["HTTP_X_FORWARDED_FOR"] si altele sunt header-e HTTP trimise de proxy-uri (daca e cazul). Evident, si astea pot fi masluite de un user rauvoitor.
Ca tot veni vorba, un snippet de cod pentru a prelua adresa IP a clientului (care ia in considerare felurite situatii posibile):
[php]function get_client_ip()
{
// get the REMOTE_ADDR as the client ip
$ip = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : ($_ENV['REMOTE_ADDR'] ? $_ENV['REMOTE_ADDR'] : ''));
// check for headers used by proxy servers to send the client IP
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
if (isset($_SERVER['HTTP_CLIENT_IP']))
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
else
$client_ip = '';
// get a clean IP
if (preg_match('/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/', $client_ip, $client_ip_))
$client_ip = $client_ip_[0];
else
$client_ip = '';
// if a proxy is used, see if the specified client IP is valid
if ($client_ip)
{
// the special IP ranges (as per RFC 1918, broadcasting, etc)
$private_ips
=
array(
/* 0. 0.0.0/8 */ '/^0\..*/',
/*127. 0.0.0/8 */ '/^127\..*/',
/*192. 0.2.0/24*/ '/^192\.0\.2\..*/',
/* 10. 0.0.0/8 */ '/^10\..*/',
/*172. 16.0.0/12*/ '/^172\.16\..*/',
/*192.168.0.0/16*/ '/^192\.168\..*/',
/*169.254.0.0/16*/ '/^169\.254\..*/'
);
// replace any special client IP address with the proxy IP address
// we assume that a special IP address is a private IP address,
// therefore it is reasonable to use the proxy's IP address
$ip = preg_replace($private_ips, $ip, $client_ip);
}
// return the client IP
return $ip;
}[/php]
Codul de mai sus a fost cules de pe net si modificat (din pacate nu mai stiu de unde l-am luat, sa creditez omu' pentru codul lui
).
Numa' bune.
Ca tot veni vorba, un snippet de cod pentru a prelua adresa IP a clientului (care ia in considerare felurite situatii posibile):
[php]function get_client_ip()
{
// get the REMOTE_ADDR as the client ip
$ip = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : ($_ENV['REMOTE_ADDR'] ? $_ENV['REMOTE_ADDR'] : ''));
// check for headers used by proxy servers to send the client IP
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
if (isset($_SERVER['HTTP_CLIENT_IP']))
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
else
$client_ip = '';
// get a clean IP
if (preg_match('/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/', $client_ip, $client_ip_))
$client_ip = $client_ip_[0];
else
$client_ip = '';
// if a proxy is used, see if the specified client IP is valid
if ($client_ip)
{
// the special IP ranges (as per RFC 1918, broadcasting, etc)
$private_ips
=
array(
/* 0. 0.0.0/8 */ '/^0\..*/',
/*127. 0.0.0/8 */ '/^127\..*/',
/*192. 0.2.0/24*/ '/^192\.0\.2\..*/',
/* 10. 0.0.0/8 */ '/^10\..*/',
/*172. 16.0.0/12*/ '/^172\.16\..*/',
/*192.168.0.0/16*/ '/^192\.168\..*/',
/*169.254.0.0/16*/ '/^169\.254\..*/'
);
// replace any special client IP address with the proxy IP address
// we assume that a special IP address is a private IP address,
// therefore it is reasonable to use the proxy's IP address
$ip = preg_replace($private_ips, $ip, $client_ip);
}
// return the client IP
return $ip;
}[/php]
Codul de mai sus a fost cules de pe net si modificat (din pacate nu mai stiu de unde l-am luat, sa creditez omu' pentru codul lui
Numa' bune.
People ask for criticism, but they only want praise.
W. Somerset Maugham (1874 - 1965).
http://www.arond-design.ro
W. Somerset Maugham (1874 - 1965).
http://www.arond-design.ro
-
bellarchitect
- PHPRomania Supporter
- Mesaje: 14
- Membru din: Mie Noi 17, 2004 4:07 am
- Localitate: Bucuresti
- Contact:
-
bellarchitect
- PHPRomania Supporter
- Mesaje: 14
- Membru din: Mie Noi 17, 2004 4:07 am
- Localitate: Bucuresti
- Contact:
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori