[php/JS] Czy użytkownik głosował

0

Cześć, na niektórych stronach jest tak, że jak jest jakaś sonda, czy coś do glosowania, nie trzeba się logować, żeby zagłosować. Po prostu się głosuje. I o dziwo, jeśli zagłosuję, usunę ciastka ze swojego kompa, to drugi raz już nie mogę zagłosować. Jak coś takiego się robi?

0

Jak masz publiczny IP przydzielony to po IP oczywiscie (jesli to jest po stronie servera wiadome :))), jesli jestes w jakims LAN'ie i posiadasz prywatny IP to mozna Cie zidentyfikowac po publicznym IP i porcie jaki nadal NAT ruter wysylajac pakiet.
Typowy html header, ktory server otrzymuje od przegladarki, moze tak wygladac:

GET /s/glosuj.php HTTP/1.1
Host: www.jakassonda.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: pl;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.jakassonda.org/glosuj.php
Cookie: prv=21b7a07439b540f1ca630027062ef3a0; PRV_login=3d454a0611e25a1dc14271879b31ba5a; PRV_404=1

usuwajac Cookie wiadomo jeszcze z jakiego Ip, jaka przgladarke i ewentualnie z jakiego portu sie laczysz. Bynajmniej ja bym w ten sposob identyfikowal klientow ktorzy maja cookie wylaczone.

ps. majac cookie wylaczone mozna tez ID sesji przeslac przez URL np. jakassonda.org/glos.php?id=3d454a0611e25a1dc14271879b31ba5a
i to juz wystarczy . Nie wiem jak to u ciebie wyglada. Podaj adres jakies takiej sondy.

0
mwili napisał(a)

Jak masz publiczny IP przydzielony to po IP oczywiscie (jesli to jest po stronie servera wiadome :))), jesli jestes w jakims LAN'ie i posiadasz prywatny IP to mozna Cie zidentyfikowac po publicznym IP i porcie jaki nadal NAT ruter wysylajac pakiet.

A mam jakąś pewność, że ten port nie zostanie później przydzielony komuś innemu w danej sieci?

ps. majac cookie wylaczone mozna tez ID sesji przeslac przez URL np. jakassonda.org/glos.php?id=3d454a0611e25a1dc14271879b31ba5a
i to juz wystarczy.

Nie wystarczy, bo po restarcie przeglądarki użytkownik będzie mógł raz jeszcze oddać głos :)

Nie wiem jak to u ciebie wyglada. Podaj adres jakies takiej sondy.

Teraz Ci nie podam, bo aktualnie realizuje to w inny sposób - wymagane konto do głosowania. Co jest oczywiście uciążliwe dla użytkownika i głosów jest mniej.

IP, z którego użytkownik się łączy chyba wiem, jak pobrać. Teraz kolejne pytania. Jak mogę się dowiedzieć, czy IP jest adresem zewnętrznym(to adres użytkownika), czy adresem sieci? No i jak mogę wyciągnąć ten numer portu? :)

0

z tym portem to chyba odpada, po zrestartowaniu przegladarki lacze sie z tym samym serverem z zawsze innego portu...

ps. zawsze jest wysylany adres zewnetrzny (publiczny). Adres sieci, jesli jest prywatny, zostaje zamieniony przez NAT router na adres publiczny.

0

zapisz w sobie w bazie wszystkie elementy z zapytania http (to co podał mwili), które moga wyróżniać użytkownika, czyli na przykład:
Ip+ userAgent itd.
i nie pozwalaj oddać nikomu, kto ma takie wartości jak w bazie przez powiedzmy 10 minut. Prawda jest taka, że każdy odda głos, usunie cookies, sprawdzi i da sobie spokój. Prawdopodobieństwo, że ktoś z tej samej podsieci wpadnie z dokładnie takimi samymi nagłówkami - nie za duże.
Tak czy siak nigdy nie będziesz miał pewności, ze ktoś nie zagłosował dwa razy (jak będzie rejestracja to się zarejestruję na 10 różnych maili, jak będzie sprawdzane ip - użyję proxy etc., userAgent też sobie podmienię). Chodzi o to, żeby takie oszustwo było na tyle niewygodne, żeby nikomu się nie chciało i jednocześnie nie blokowało uczciwych userów ;)

0
id02009 napisał(a)

zapisz w sobie w bazie wszystkie elementy z zapytania http (to co podał mwili), które moga wyróżniać użytkownika, czyli na przykład:
Ip+ userAgent itd.
i nie pozwalaj oddać nikomu, kto ma takie wartości jak w bazie przez powiedzmy 10 minut. Prawda jest taka, że każdy odda głos, usunie cookies, sprawdzi i da sobie spokój. Prawdopodobieństwo, że ktoś z tej samej podsieci wpadnie z dokładnie takimi samymi nagłówkami - nie za duże.
Tak czy siak nigdy nie będziesz miał pewności, ze ktoś nie zagłosował dwa razy (jak będzie rejestracja to się zarejestruję na 10 różnych maili, jak będzie sprawdzane ip - użyję proxy etc., userAgent też sobie podmienię). Chodzi o to, żeby takie oszustwo było na tyle niewygodne, żeby nikomu się nie chciało i jednocześnie nie blokowało uczciwych userów ;)

Czyli podsumowując. Jak Wy byście wykonali takie zadanie?

0

Sugerujesz, że podajemy Ci sposoby, których sami byśmy nie użyli, bo mamy lepsze? Jakies asy w rękawach?
Czy po prostu jesteś leniwy i chcesz gotowe skrypty?

0

Myślę że on raczej chce gotowe skrypty :P
Jest tego na świecie (skryptów głosowania) od cholery, poszukaj sobie.

0

Dobry gotowy skrypt nie jest zły, ale nie o to chodzi ;)

Podaliście kilka możliwości. A ja oczekuję od Was, że jako ludzie z większym doświadczeniem podacie mi jedną - najlepszą.

0

Programowanie to taka dziedzina, w której na niektóre rzeczy nie ma lekarstwa. Nawet jeśli ktoś poda ci taką możliwość to będzie ona najlepsza według niego lub wąskiego kręgu osób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1