Konkursy, głosowanie itp… – cz.2 – analiza / wykrywanie

Wcześniej opisałem proste metody do ominięcia „zabezpieczeń” w całkiem sporej (jak się okazuje) ilości sond, ankiet, konkursów itp. No dobrze, ale co zrobić jeżeli sami prowadzimy serwis w którym jest głosowanie, a chcemy sprawdzić, czy… i ile osób próbuje oszukiwać.

Analiza

  1. Referer
  2. Ciastka
  3. Logowanie
  4. Pula adresów ip
  5. Przyrost ilości głosów

Referer

Pierwszym pomysłem jest sprawdzanie (zapisywanie) referera, czyli informacji skąd przyszło żądanie do strony (z zapisem głosu). Adresem w zmiennej $_SERVER['HTTP_REFERER'] powinien być adres gdzie znajduje się formularz, czy link do oddania głosu (z ankietą, zdjęciem, artykułem itp.). Jeżeli adres jest inny (lub brak adresu) – głos nie powinien się liczyć. Mamy również informację skąd przychodzą głosy (linki bezpośrednie z innych serwisów, iframe, img).

Należy również pamiętać, że ten adres można w łatwy sposób sfałszować, np. wykorzystując bibliotekę curl. Ale ograniczy to sporą rzeszę bezpośrednich głosów od użytkowników, który nie są świadomi oddania głosu.

Ciastka

Jednym z częstych zabezpieczeń jest ustawienie ciastka (po głosowaniu). Pomysł nawet dobry, bo taki użytkownik nie będzie mógł zagłosować ponownie ze względu na to że ciastko zapisane jest w jego przeglądarce. Dodatkowo można ustawić „czas życia” ciastka, wiec po określonym czasie użytkownik będzie mógł zagłosować jeszcze raz.
Ale…

* ciastko można usunąć
* można uruchomić inną przeglądarkę
* można również zablokować zapisywanie ciastek

Czyli zabezpieczenie żadne. Nie mniej jednak, ustawienie ciastka po oddaniu głosu może pomóc nam w komunikacji z normalnymi użytkownikami (np. ukrycie przycisku głosowania i pokazanie zaślepki itp.)

Logowanie

Jeżeli nasz konkurs zorganizowaliśmy tylko dla zalogowanych użytkowników (wymagana wcześniejsza rejestracja). To wydaje się, że rozwiąże to nasze problemy ze zmienianiem adresu Ip, czyszczeniem ciastek, automatycznym głosowaniem przez nieświadomych użytkowników. Ale należy zwrócić uwagę na fakt, że dany użytkownik może zarejestrować się kilka/kilkanaście/kilkadziesiąt razy. To tylko kwestia wolnego czasu. Mając spora liczbę kont w serwisie, znów można wykorzystać curl-a do automatycznego logowanie się na każde konto i oddania głosu.

Należy pamiętać więc o odpowiednim formularzu rejestracji (captcha, czas rejestracji od momentu wejścia na stronę), o weryfikacji nowych użytkowników (np. potwierdzenie adresu e-mail), o wykrywaniu nowych rejestracji z takich samych adresów (lub podobnych) IP  (formatka do moderacji powinna posiadać taką funkcjonalność). Warto również mieć możliwość podglądu adresów IP z których logują się użytkownicy. W sporadycznych przypadkach można w ten sposób wychwycić kombinatorów z proxy itp.)

Pula adresów ip

Powinna być tez możliwość blokowania konkretnych adresów IP (lista serwerów proxy), spamerzy itp.

Przyrost ilości głosów

Ważnym elementem jest badanie przyrostu głosów. Warto mieć możliwość „podglądnięcia” jak wygląda głosowanie w funkcji czasu (np. 24 h). Głosów w godzinach nocnych powinno być mniej (lub wcale). Jeżeli pojawią się duże skoki warto zainteresować się sprawą.

Można również wysyłać (mailem) np. raz dziennie informację o np. 10 elementach które zdobyły największa liczbę głosów w ostatnich 24h (+ oczywiście ile wynosi ta liczba :) .