Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: walka z botami w konkursach
Forum PHP.pl > Forum > PHP
czachor
Witam,

czy macie jakieś techniki zabezpieczania się przed botami, którymi użytkownicy np. głosują w jakiś konkursach?

Mam taki problem - jest konkurs, w którym o jakiejś godzinie (umownie godzinie zero) można wygrać gadżety. Użytkownik, który założy konto w serwisie (rejestracja z reCaptcha, wysłanie potwierdzenia na e-mail i kliknięcie w link aktywujący konto), otrzymuje 4 głosy (odnawialne po każdej godzinie zero). Użytkownicy bez konta nie zagłosują. Głosowanie polega na wyborze jednej z 2 opcji - wybór nie ma znaczenia.

Licznik czasu do następnej godziny zero jest wyświetlany na stronie i działa przy pomocy JS (wartość początkowa licznika jest pobierana via ajax z serwera). Jak w takich konkursach bywa, wygrywa użytkownik, który odda głos najbliżej danej godziny zero.

Praktyka wygląda tak... Użytkownik przy pomocy bota zakłada kilkanaście kont w serwisie. O godzinie zero do ataku rusza bot, otwierający w swoim oknie kilka okien przeglądarki, loguje się w każdym z nich na osobne konto i zaczyna masowo oddawać głosy w oparciu o wskazanie licznika czasu. Skuteczność jest bardzo duża, z reguły jednocześnie atakuje kilka-kilkanaście botów, więc 90% wygranych to boty. Oczywiście każda wygrana jest sprawdzana w logach i weryfikowana, ale jest to proces czasochłonny.

Problemy są takie:
1. Jak można zablokować masowe zakładanie kont? Jest reCaptcha, ale z tym sobie boty radzą. Ukryte pola odpadają, bo bot jest pisany pod konkretny konkurs. Najlepszym rozwiązaniem jest chyba stworzenie bazy pytań logicznych, np. "dodaj dwa plus dwa i wpisz wynik słownie" - ale takak baza będzie skończona i użytkownik może stworzyć sobie bazę pytań i odpowiedzi.
2. Jak zablokować głosowanie przez boty przy spełnieniu zasad usability (captche i inne odpadają, również przy logowaniu)?
3. Inna opcja pkt. 2: Jak wykrywać, że głosuje bot? Zasadniczo nie zależy mi na głosie, ale na tym, żeby nagrody nie wygrał bot. Dodam, że ponieważ bot jest przeglądarkowy, user agent nie pomoże w tym przypadku.

Jeśli coś niejasno opisałem, proszę oczywiście o pytania. Mam nadzieję, że powstanie jakaś dyskusja w temacie, która przyda się nie tylko mi.
Pilsener
Ja mam prosty i sprawdzony sposób - głosowanie przez SMS Lkingsmiley.png

A co do reszty to ma być zabawa. Robię najczęściej ograniczenie raz na godzinę z jednego IP (sprzyja to ilości odsłon). Często userzy się skarżą, że z tego IP oddano już głos a nie głosowali - cóż, liczba adresów jest ograniczona wink.gif

Chyba, że zależy nam z jakiś powodów na liczbie kont (np. mamy prowizję od tego) to robimy system jedno konto = jeden głos i wtedy każdy zakłada multum kont.

Na zawodowych graczy nie ma rady, ale jest rada na boty - napisać dobry kapcia, którego pierwszy lepszy dzieciak nie złamie.
czachor
Głosowanie przez SMS jest również jako alternatywny kanał, ale nie mogę ograniczać się tylko do niego, bo jest to dużo większa bariera wejścia. Natomiast ograniczenie IP jest zbyt restrykcyjne i jako takie niestety odpada - inaczej już dawno byłoby zaimplementowane smile.gif

Jeśli chodzi o captche - reCaptcha z tego co wiem jest dosyć trudna do złamania, ale tak czy tak są aplikacje, które służą do jej łamania.
Sky_walker
Dlatego własna jest lepsza - ktoś musiałby wykombinować dedykowany skrypt do łamania jej, a to już jest większy koszt smile.gif pomijając kwestię, że część ludzi nawet nie ma pojęcia jak się za to zabrać co samo w sobie stanowi niezłą barierę smile.gif
czachor
Jest to oczywiście racja, ale to byłoby rozwiązane na rejestrację przez boty. Główny problem to głosowanie przez boty, tutaj captcha odpada, bo chodzi o łatwe oddanie głosu.

PS. Chyba nie działa mi powiadamianie mailem o nowych odpowiedziach...?
crocodillo
reCaptcha przy oddawaniu głosu?

Możesz też wprowadzić potwierdzenie po oddaniu głosu w postaci reCaptcha itp.
Pilsener
Nie wspominając już o mailowym potwierdzeniu oddania głosu wink.gif Ale to wszystko tylko utrudnienie - no cóż, trzeba utrudniać życie botom tak długo, aż ich kodowanie stanie się nieopłacalne.
czachor
@crocodillo - tak jak piszesz, jest to na duże utrudnienie oraz biorąc pod uwagę, że każdy ma 4 głosy do wstrzelenia się we właściwą godzinę, niemożliwe do wprowadzenia - w praktyce każdy miałby 1 głos zamiast 4, bo nikt tak szybko nie wpisuje captchy.

@Pilsener - jest to jakieś wyjście, ale jak boty umieją się zarejestrować używając przy tym recaptchy i właśnie potwierdzenia konta mailwem. Myślałem również o zatwierdzeniu swoich głosów: użytkownik oddaje te 4 głosy, ale po ostatnim musi np. w ciągu godziny wpisać captchę (lub wykonać inną czynność), która udowodni, że jest człowiekiem. To oznacza przesunięcie wyboru zwycięzcy o godzin. Zasadniczo wyjście wydaje się w porządku - słaby punkt to to, że znowu jest to jakieś utrudnienie.

Zastanawiałem sie również nad jakims algorytmem, który wykrywałby boty. Jakieś połączenie wykrywania aktywności (klików) użytkownika, user agent, adresu IP oraz analizowania tego pod kątem czasu. Jak na razie sporo teoretyzowania i zbyt dużo niewiadomych.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.