Przyjąłem odpowiedź, ale niestety wierzę, że utknęliśmy w naszym pierwotnym najgorszym scenariuszu: CAPTCHA wszyscy próbują kupić bzdury . Krótkie wyjaśnienie: buforowanie / farmy internetowe uniemożliwiają śledzenie trafień, a jakiekolwiek obejście (wysyłanie niebuforowanego sygnału nawigacyjnego do sieci, pisanie do zunifikowanego stołu itp.) Spowalnia działanie witryny bardziej niż boty. Prawdopodobnie jest jakiś drogi sprzęt firmy Cisco lub podobny, który może pomóc na wysokim poziomie, ale trudno uzasadnić koszt, jeśli CAPTCHA -ing wszystkich jest alternatywą. Spróbuję później pełniejszego wyjaśnienia, a także posprzątać to dla przyszłych poszukiwaczy (choć inni mogą spróbować, ponieważ jest to wiki społeczności).
Sytuacja
Chodzi o sprzedaż torby na bzdury na woot.com. Jestem prezesem Woot Workshop, filii Woot, która zajmuje się projektowaniem, pisze opisy produktów, podcasty, posty na blogach i moderuje fora. Pracuję z CSS / HTML i ledwo znam inne technologie. Ściśle współpracuję z programistami i omówiłem wszystkie odpowiedzi tutaj (i wiele innych pomysłów, które mieliśmy).
Użyteczność jest ogromną częścią mojej pracy, a sprawianie, że strona jest ekscytująca i przyjemna, to większość jej pozostałych. To tutaj wywodzą się trzy cele poniżej. CAPTCHA szkodzi użyteczności, a boty kradną radość i podekscytowanie z naszej badziewnej sprzedaży.
Boty dziesiątki razy uderzają w naszą stronę główną, skrobiąc drugi ekran (i / lub skanując nasz RSS) w celu wyprzedaży losowych bzdur. Gdy tylko to zobaczą, uruchamia drugi etap programu, który się loguje, klika Chcę, jeden, wypełnia formularz i kupuje badziewie.
Ocena
lc : Na stosie przepływu i innych stronach, które używają tej metody, prawie zawsze mają do czynienia z uwierzytelnionymi (zalogowanymi) użytkownikami, ponieważ wymaga tego próba wykonania zadania.
Na Woot anonimowi (niezalogowani) użytkownicy mogą przeglądać naszą stronę główną. Innymi słowy, trzaskające boty mogą nie być uwierzytelniane (i zasadniczo nie mogą być śledzone z wyjątkiem adresu IP).
Wracamy do skanowania adresów IP, które: a) jest dość bezużyteczne w dobie sieci w chmurze i zombie spambotów; b) łapie zbyt wielu niewinnych, biorąc pod uwagę liczbę firm pochodzących z jednego adresu IP (nie wspominając o problemach z niestatyczni dostawcy usług internetowych i potencjalne uderzenia wydajności w celu próby śledzenia tego).
Aha, i dzwonienie do nas byłoby najgorszym możliwym scenariuszem. Czy możemy prosić, żeby do ciebie zadzwonili?
Metody BradC : Neda Batcheldera wyglądają całkiem fajnie, ale są dość mocno zaprojektowane, aby pokonać boty zbudowane dla sieci witryn. Naszym problemem jest to, że boty są budowane specjalnie w celu pokonania naszej witryny. Niektóre z tych metod mogą prawdopodobnie działać przez krótki czas, dopóki skrypty nie rozwiną swoich botów, aby zignorować plaster miodu, przesłać ekran do pobliskich nazw etykiet zamiast identyfikatorów formularzy i użyć kontrolki przeglądarki obsługującej javascript.
lc ponownie : „Chyba że szum jest częścią twojego planu marketingowego”. Tak, zdecydowanie tak jest. Zaskoczenie, kiedy pojawia się przedmiot, a także podekscytowanie, jeśli uda ci się go zdobyć, jest prawdopodobnie tak samo ważne lub ważniejsze niż bzdury, które w rzeczywistości dostajesz. Wszystko, co eliminuje kto pierwszy ten lepszy, szkodzi emocjom związanym z „wygrywaniem” badziewia.
novatrust : I ja, na przykład, witam naszych nowych panów-botów. W rzeczywistości oferujemy kanały RSS, aby umożliwić aplikacjom zewnętrznym skanowanie naszej witryny w poszukiwaniu informacji o produkcie, ale nie przed kodem HTML strony głównej. Jeśli dobrze to interpretuję, twoje rozwiązanie pomaga celowi 2 (problemy z wydajnością), całkowicie poświęcając cel 1 i po prostu rezygnując z faktu, że boty będą kupować większość bzdur. Głosowałem za odpowiedzią, ponieważ pesymizm z ostatniego akapitu wydaje mi się trafny. Wygląda na to, że nie ma tu srebrnej kuli.
Reszta odpowiedzi zazwyczaj opiera się na śledzeniu adresów IP, które znowu wydaje się być zarówno bezużyteczne (w przypadku botnetów / zombie / sieci w chmurze), jak i szkodliwe (łapanie wielu niewinnych osób pochodzących z tego samego adresu IP).
Jakieś inne podejścia / pomysły? Moi programiści powtarzają „po prostu zróbmy CAPTCHA”, ale mam nadzieję, że istnieją mniej inwazyjne metody dla wszystkich rzeczywistych ludzi, którzy chcą trochę naszego badziewia.
Oryginalne pytanie
Powiedzmy, że sprzedajesz coś taniego, co ma bardzo wysoką postrzeganą wartość i masz bardzo ograniczoną ilość. Nikt nie wie dokładnie, kiedy sprzedasz ten przedmiot. Ponad milion osób regularnie odwiedza to, co sprzedajesz.
Skończysz ze skryptami i botami próbującymi programowo [a] dowiedzieć się, kiedy sprzedajesz rzeczony przedmiot, i [b] upewnij się, że są jednymi z pierwszych, którzy go kupią. To jest do kitu z dwóch powodów:
- Twoja strona została zablokowana przez nie-ludzi, spowalniając wszystko dla wszystkich.
- Skrypty ostatecznie „wygrywają” produkt, powodując, że stali bywalcy czują się oszukani.
Pozornie oczywistym rozwiązaniem jest utworzenie obręczy, na którą użytkownicy będą mogli skakać przed złożeniem zamówienia, ale są z tym co najmniej trzy problemy:
- Doświadczenie użytkownika jest do bani dla ludzi, którzy muszą rozszyfrować CAPTCHA, wybrać kota lub rozwiązać problem matematyczny.
- Jeśli dostrzegana korzyść jest wystarczająco wysoka, a tłum wystarczająco duży, pewna grupa obejdzie wszelkie poprawki, prowadzące do wyścigu zbrojeń. (Jest to szczególnie prawdziwe, im prostsza jest poprawka; ukryty formularz „komentarze”, zmiana układu elementów formularza, błędne oznaczanie ich, ukryty tekst „gotcha” wszystko będzie działać raz, a następnie należy go zmienić, aby walczyć z tym konkretnym formularzem .)
- Nawet jeśli skrypty nie są w stanie „rozwiązać” twojej poprawki, nie przeszkadza im to w zatrzaśnięciu twojej strony głównej, a następnie w alarmie, aby scripter wypełnił zamówienie ręcznie. Biorąc pod uwagę, że uzyskają przewagę dzięki rozwiązaniu [a], prawdopodobnie nadal wygrają [b], ponieważ będą pierwszymi ludźmi, którzy dotrą do strony zamówienia. Ponadto 1. nadal występuje, powodując błędy serwera i zmniejszając wydajność dla wszystkich.
Innym rozwiązaniem jest obserwowanie zbyt częstego uderzania adresów IP, blokowanie ich od zapory lub w inny sposób zapobieganie ich zamawianiu. Może to rozwiązać problem 2. i zapobiec [b], ale wydajność związana ze skanowaniem adresów IP jest ogromna i prawdopodobnie spowodowałaby więcej problemów, takich jak 1., niż powodowane przez skrypty. Ponadto możliwość tworzenia sieci w chmurze i zombie Spambot sprawia, że sprawdzanie adresów IP jest dość bezużyteczne.
Trzeci pomysł, wymuszający ładowanie formularza zamówienia przez jakiś czas (powiedzmy, pół sekundy) potencjalnie spowolniłby postęp szybkich zamówień, ale znowu, skrypty nadal byłyby pierwszymi osobami, przy dowolnej prędkości, która nie byłaby szkodliwa dla faktyczni użytkownicy.
Cele
- Sprzedaj przedmiot ludziom bez skryptów.
- Utrzymuj działanie strony z prędkością nie spowalnianą przez boty.
- Nie kłopotaj „normalnych” użytkowników jakimikolwiek zadaniami do wykonania, aby udowodnić, że są ludźmi.
źródło
Odpowiedzi:
Co powiesz na wdrożenie czegoś takiego jak SO z CAPTCHA?
Jeśli używasz strony normalnie, prawdopodobnie nigdy jej nie zobaczysz. Jeśli zdarza się, że zbyt często ładujesz tę samą stronę, zbyt szybko publikujesz kolejne komentarze lub coś innego, co wywołuje alarm, spraw, by udowodnili, że są ludźmi. W twoim przypadku prawdopodobnie będzie to ciągłe przeładowywanie tej samej strony, szybkie podążanie za każdym linkiem na stronie lub zbyt szybkie wypełnianie formularza zamówienia, by być człowiekiem.
Jeśli nie sprawdzą x razy z rzędu (powiedzmy, 2 lub 3), daj temu IP limit czasu lub inny podobny środek. Następnie po upływie limitu czasu zrzuć je z powrotem na czek.
Ponieważ masz niezarejestrowanych użytkowników uzyskujących dostęp do witryny, musisz mieć tylko adresy IP. Możesz wysyłać sesje do każdej przeglądarki i śledzić w ten sposób, jeśli chcesz. I oczywiście rzuć okiem na człowieka, jeśli zbyt wiele sesji jest (ponownie) tworzonych (kolejno) kolejno (na wypadek, gdyby bot nadal usuwał ciasteczko).
Jeśli chodzi o łapanie zbyt wielu niewinnych, możesz umieścić wyłączenie odpowiedzialności na stronie sprawdzania przez ludzi: „Ta strona może się również pojawić, jeśli zbyt wielu anonimowych użytkowników przegląda naszą witrynę z tej samej lokalizacji. Zachęcamy do rejestracji lub logowania, aby uniknąć to." (Dostosuj odpowiednio sformułowanie.)
Poza tym, jakie są szanse, że X osób ładuje te same strony w tym samym czasie z jednego adresu IP? Jeśli są wysokie, być może potrzebujesz innego mechanizmu wyzwalania dla twojego alarmu.
Edycja: Inną opcją jest, jeśli zawiodą zbyt wiele razy, a masz pewność co do popytu na produkt, aby je zablokować i sprawić, aby osobiście ZADZWOŃ do usunięcia bloku.
Rozmowy telefoniczne wydają się być prostą czynnością, ale upewniają się, że gdzieś za komputerem jest człowiek . Kluczem jest, aby blok był na miejscu tylko dla stanu, który prawie nigdy nie powinien się zdarzyć, chyba że jest to bot (np. Nieudane sprawdzenie kilka razy z rzędu). Następnie WYMUSZA interakcję człowieka - podniesienie telefonu.
W odpowiedzi na komentarz, że dzwonią do mnie, najwyraźniej tutaj jest kompromis. Czy martwisz się wystarczająco o to, czy Twoi użytkownicy są ludźmi, którzy przyjmują kilka połączeń telefonicznych, gdy trafią do sprzedaży? Gdybym był tak zaniepokojony tym, że produkt trafia do użytkowników, musiałbym podjąć tę decyzję, być może poświęcając (trochę) trochę czasu na tym procesie.
Ponieważ wydaje się, że jesteś zdeterminowany, aby nie pozwolić botom uzyskać przewagi nad witryną, uważam, że telefon może być dobrym rozwiązaniem. Ponieważ nie zarabiam na twoim produkcie, nie jestem zainteresowany otrzymywaniem tych połączeń. Gdybyś jednak podzielił się częścią tego zysku, mogę się zainteresować. Ponieważ jest to twój produkt, musisz zdecydować, ile ci zależy i odpowiednio go wdrożyć.
Inne sposoby na zwolnienie bloku po prostu nie są tak skuteczne: limit czasu (ale po pewnym czasie będą musieli zatrzasnąć twoją stronę, powtórz płukanie), długi limit czasu (jeśli to naprawdę człowiek próbuje kupić Twój produkt, byliby SOL i ukarani za nieudane sprawdzenie), e-mailem (łatwe do wykonania przez boty), faksem (to samo) lub pocztą ślimakową (zajmuje zbyt dużo czasu).
Zamiast tego możesz oczywiście zwiększyć limit czasu dla każdego adresu IP za każdym razem, gdy otrzymają limit czasu. Tylko upewnij się, że nie karzesz przypadkowo prawdziwych ludzi.
źródło
Musisz wymyślić sposób, aby boty kupowały rzeczy, które są znacznie droższe: 12 mm skrzydło: 20 USD. Zobacz, ile botów się wyskakuje, zanim scenarzyści zdecydują, że nimi grasz.
Wykorzystaj zyski, aby kupić więcej serwerów i zapłacić za przepustowość.
źródło
Moim rozwiązaniem byłoby uczynienie skrobania ekranu bezwartościowym poprzez opóźnienie o około 10 minut botów i skryptów.
Oto jak bym to zrobił:
Nie musisz rejestrować każdego adresu IP przy każdym trafieniu. Śledź tylko jeden z każdych 20 trafień. Powtarzający się przestępca nadal będzie pojawiał się w losowym śledzeniu okazjonalnym.
Zachowaj pamięć podręczną strony z około 10 minut wcześniej.
Gdy haker / bot ponownie trafi na twoją stronę, daj mu 10-minutową stronę z pamięci podręcznej.
Nie będą od razu wiedzieć, że dostają starą stronę. Będą w stanie to zeskrobać i wszystko, ale nie wygrają już żadnych wyścigów, ponieważ „prawdziwi ludzie” będą mieli 10 minut przewagi.
Korzyści:
Wady
Co myślisz?
źródło
Przeczytaj ten artykuł ned Batchelder tutaj . Jego artykuł dotyczy zatrzymywania robotów spamujących, ale te same techniki można łatwo zastosować do Twojej witryny.
Inne pomysły:
EDYCJA: Aby być całkowicie jasnym, powyższy artykuł Neda opisuje metody zapobiegania automatycznemu ZAKUPOWI przedmiotów, uniemożliwiając BOTowi przechodzenie przez formularze w celu złożenia zamówienia. Jego techniki nie byłyby przydatne w zapobieganiu botom zeskrobywania strony głównej w celu ustalenia, kiedy Bandoleer marchwi pojawi się na sprzedaż. Nie jestem pewien, czy zapobieganie TO jest naprawdę możliwe.
W odniesieniu do twoich komentarzy na temat skuteczności strategii Neda: Tak, omawia honeypoty, ale nie sądzę, że to jego najsilniejsza strategia. Jego dyskusja na temat SPINNERA jest pierwotnym powodem, dla którego wspomniałem o jego artykule. Przepraszam, że nie wyjaśniłem tego w moim oryginalnym poście:
Oto jak możesz to zaimplementować na WOOT.com:
Zmień wartość „tajną” używaną jako część skrótu za każdym razem, gdy nowy przedmiot trafi do sprzedaży. Oznacza to, że jeśli ktoś zamierza zaprojektować BOT do automatycznego zakupu przedmiotów, działałoby to tylko do momentu, gdy następny przedmiot pojawi się w sprzedaży !!
Nawet jeśli ktoś jest w stanie szybko odbudować swojego bota, wszyscy pozostali faktyczni użytkownicy już kupili BOC, a Twój problem został rozwiązany!
Inną strategią, którą omawia, jest od czasu do czasu zmiana techniki plastra miodu (ponownie zmień ją, gdy nowy przedmiot trafi do sprzedaży):
Myślę, że moim ogólnym pomysłem jest ZMIANA PROJEKTU FORMULARZA, gdy każdy nowy przedmiot trafi do sprzedaży. Lub w NAJMNIEJ, zmień to, gdy nowy BOC trafi do sprzedaży.
Co to jest kilka razy w miesiącu?
Jeśli zaakceptujesz tę odpowiedź, czy dasz mi znać, kiedy nadchodzi kolejna? :)
źródło
<form>
i wysyłany po przesłaniu? Ponieważ bot również może to łatwo zeskrobać.P: Jak powstrzymasz skryptów przed zatłaczaniem Twojej witryny setki razy na sekundę?
Odp .: Nie. Nie ma sposobu, aby temu zapobiec przez zewnętrznych agentów.
Możesz użyć szerokiej gamy technologii do analizy przychodzących żądań i heurystycznie próbować ustalić, kto jest, a kto nie jest człowiekiem ... ale to się nie powiedzie. W końcu, jeśli nie natychmiast.
Jedynym realnym długoterminowym rozwiązaniem jest zmiana gry, aby strona nie była przyjazna botom lub była mniej atrakcyjna dla skryptów.
Jak to robisz? Cóż, to inne pytanie! ;-)
...
OK, niektóre opcje zostały podane (i odrzucone) powyżej. Nie jestem do końca zaznajomiony z twoją witryną, ponieważ obejrzałem ją tylko raz, ale ponieważ ludzie mogą czytać tekst na obrazach, a boty nie mogą tego łatwo zrobić, zmień ogłoszenie na obraz. Nie CAPTCHA , tylko obraz -
Przeprowadź próby czasowe z udziałem prawdziwych ludzi i zignoruj („Ups, wystąpił błąd, przepraszam! Spróbuj ponownie”) odpowiedzi szybciej niż (powiedzmy) połowę tego czasu. To wydarzenie powinno również wywołać ostrzeżenie dla programistów, że co najmniej jeden bot odkrył kod / grę, więc nadszedł czas, aby zmienić kod / grę.
W każdym razie kontynuuj okresową zmianę gry, nawet jeśli żadne boty go nie uruchamiają, po prostu marnuj czas programistów. W końcu scenarzyści powinni zmęczyć się grą i udać się gdzie indziej ... mamy nadzieję ;-)
Ostatnia sugestia: kiedy pojawi się prośba o twoją stronę główną, umieść ją w kolejce i odpowiedz na żądania w osobnym procesie (być może będziesz musiał zhakować / rozszerzyć serwer WWW, aby to zrobić, ale prawdopodobnie będzie wart). Jeśli pojawi się inne żądanie od tego samego adresu IP / agenta, gdy pierwsze żądanie znajduje się w kolejce, zignoruj je. Powinno to automatycznie zrzucić ładunek z botów.
EDYCJA: inną opcją oprócz korzystania z obrazów jest użycie javascript do wypełnienia tekstu kup / nie kup; boty rzadko interpretują javascript, więc go nie zobaczą
źródło
Nie wiem, jak to jest wykonalne: ... przejść do ofensywy.
Dowiedz się, jakie dane skanują boty. Podaj im dane, których szukają, gdy NIE sprzedajesz badziewia. Zrób to w sposób, który nie będzie przeszkadzał ani dezorientował użytkowników. Kiedy boty uruchomią fazę drugą, zalogują się i wypełnią formularz, aby kupić 100 $ basebas zamiast BOC. Oczywiście zakłada to, że boty nie są szczególnie odporne.
Innym pomysłem jest wprowadzenie losowych spadków cen w trakcie okresu wyprzedaży torebek. Kto kupiłby losową torbę o badziewie za 150 USD, jeśli WYRAŹNIE PODAJESZ, że jest ona warta jedynie 20 USD? Nikt oprócz nadgorliwych botów. Ale potem 9 minut później to 35 dolarów ... a 17 minut później to 9 dolarów. Lub cokolwiek.
Jasne, królowie zombie byliby w stanie zareagować. Chodzi o to, aby ich błędy stały się dla nich bardzo kosztowne (i zmusić ich do zapłaty za ich zwalczanie).
Wszystko to zakłada, że chcesz wkurzyć niektórych lordów botów, co może nie być w 100% wskazane.
źródło
Tak naprawdę problemem wydaje się być to, że boty chcą swojej „badziewki”, ponieważ ma ona wysoką wartość postrzeganą za niską cenę postrzeganą. Czasami oferujesz ten przedmiot, a boty czają się, czekając, czy jest dostępny, a następnie kupują przedmiot.
Ponieważ wydaje się, że właściciele botów zarabiają (lub potencjalnie zysku), sztuczka polega na tym, aby uczynić to nierentownym, zachęcając ich do kupowania badziewia.
Po pierwsze, zawsze oferuj „bag 'o crap”.
Po drugie, upewnij się, że bzdury to zwykle bzdury.
Po trzecie, często obracaj badziewia.
Proste, nie?
Będziesz potrzebować stałego „dlaczego nasze badziewie są czasem badziewie?” link obok oferty, aby wyjaśnić ludziom, co się dzieje.
Kiedy bot zobaczy, że to badziewie i bzdury są automatycznie kupowane, odbiorca będzie strasznie zdenerwowany, że zapłacił 10 $ za złamaną wykałaczkę. A potem pusta torba na śmieci. A potem trochę brudu z dolnej części buta.
Jeśli kupią wystarczającą ilość tego badziewia w stosunkowo krótkim czasie (i masz duże zastrzeżenia w całym kraju wyjaśniające, dlaczego to robisz), stracą uczciwą „torbę” lub „gotówkę” na Twoim ” bag 'o crap ”. Nawet interwencja człowieka z ich strony (sprawdzanie, czy to badziewie nie jest badziewiem) może się nie powieść, jeśli wystarczająco często je obracasz. Cholera, może boty zauważą i nie kupią niczego, co było w rotacji przez zbyt krótki czas, ale to oznacza, że ludzie kupią non-bzdury.
Heck, Twoi stali klienci mogą być tak rozbawieni, że możesz to zmienić w wielką wygraną marketingową. Zacznij pisać, ile sprzedaje karpia „badziewia”. Ludzie wrócą tylko po to, aby zobaczyć, jak mocno zostały ugryzione boty.
Aktualizacja: spodziewam się, że możesz otrzymać kilka połączeń z przodu z ludźmi narzekającymi. Nie sądzę, że możesz to całkowicie powstrzymać. Jeśli jednak zabije to boty, zawsze możesz go zatrzymać i uruchomić ponownie później.
źródło
Prawdopodobnie nie chcesz tego słyszeć, ale # 1 i # 3 wzajemnie się wykluczają.
Nikt też nie wie, że jesteś botem. Nie ma żadnego programowego sposobu, aby stwierdzić, czy na drugim końcu połączenia jest człowiek, czy nie, bez potrzeby, aby osoba coś zrobiła. Zapobieganie robieniu skryptów / botów w Internecie to główny powód wynalezienia CAPTCHA. To nie jest tak, że to jakiś nowy problem, który nie wymagał wiele wysiłku. Gdyby istniał lepszy sposób, który nie wymagałby kłopotów dla prawdziwych użytkowników niż CAPTCHA, wszyscy już by go używali.
Myślę, że musisz zmierzyć się z faktem, że jeśli chcesz powstrzymać boty od strony zamawiania, dobry CAPTCHA to jedyny sposób, aby to zrobić. Jeśli popyt na twoje losowe bzdury jest wystarczająco wysoki, aby ludzie byli gotowi dołożyć takich starań, aby je zdobyć, prawi użytkownicy nie będą zniechęcani przez CAPTCHA.
źródło
Metodą używaną przez Woota do walki z tym problemem jest zmiana gry - dosłownie. Kiedy prezentują wyjątkowo pożądany przedmiot na sprzedaż, zmuszają użytkowników do grania w grę wideo w celu zamówienia.
Nie tylko skutecznie zwalcza boty (mogą z łatwością wprowadzać niewielkie zmiany w grze, aby uniknąć automatycznych graczy, a nawet oferować nową grę dla każdej sprzedaży), ale także sprawia wrażenie użytkowników „wygrywających” pożądany przedmiot przy spowolnieniu proces zamawiania.
Nadal bardzo szybko się sprzedaje, ale myślę, że rozwiązanie jest dobre - ponowna ocena problemu i zmiana parametrów doprowadziły do udanej strategii, w której rozwiązania ściśle techniczne po prostu nie istniały.
Cały Twój model biznesowy opiera się na zasadzie „kto pierwszy, ten lepszy”. Nie możesz zrobić tego, co zrobiły stacje radiowe (nie wygrywają już pierwszego dzwoniącego, wygrywają piątego, dwudziestego lub trzynastego) - to nie pasuje do twojej podstawowej funkcji.
Nie, nie da się tego zrobić bez zmiany sposobu zamawiania dla prawdziwych użytkowników.
Powiedzmy, że wdrażasz wszystkie te taktyki. Jeśli zdecyduję, że jest to ważne, po prostu zachęcę do współpracy 100 osób, zbudujemy oprogramowanie do pracy na naszych 100 osobnych komputerach i odwiedzimy Twoją witrynę 20 razy na sekundę (5 sekund między dostępami dla każdego użytkownika / plik cookie / konto / adres IP).
Masz dwa etapy:
Nie możesz umieścić captcha blokującego nr 1 - to straci prawdziwych klientów („Co? Muszę rozwiązać captcha za każdym razem, gdy chcę zobaczyć najnowszy woot?!?”).
Tak więc moja mała grupa ogląda, mierząc razem, dzięki czemu otrzymujemy około 20 czeków na sekundę, a ten, kto zobaczy zmianę jako pierwszy, zaalarmuje wszystkich pozostałych (automatycznie), którzy ponownie załadują pierwszą stronę, klikną link zamówienia i wykonają transakcję ( co może się również zdarzyć automatycznie, chyba że zaimplementujesz captcha i zmienisz go dla każdego wootoff / boc).
Możesz umieścić captcha przed numerem 2 i chociaż nie chcesz tego robić, może to być jedyny sposób, aby upewnić się, że nawet jeśli boty oglądają pierwszą stronę, prawdziwi użytkownicy otrzymują produkty.
Ale nawet z captcha mój mały zespół 100 nadal miałby znaczącą przewagę przy pierwszym poruszaniu się - i nie ma sposobu, abyś mógł powiedzieć, że nie jesteśmy ludźmi. Jeśli zaczniesz mierzyć czas naszych dostępów, po prostu dodamy trochę fluktuacji. Możemy losowo wybrać, który komputer ma zostać odświeżony, więc kolejność dostępu zmienia się stale - ale nadal wygląda wystarczająco jak człowiek.
Najpierw pozbądź się prostych botów
Musisz mieć adaptacyjną zaporę ogniową, która będzie śledzić żądania, a jeśli ktoś robi oczywistą głupią rzecz - odświeżanie więcej niż raz na sekundę w tym samym adresie IP, a następnie zastosuj taktykę, aby je spowolnić (upuść pakiety, odrzuć odrzucone lub 500 błędów itp. ).
Powinno to znacznie zmniejszyć ruch i zmienić taktykę stosowaną przez użytkowników botów.
Po drugie, spraw, aby serwer był niesamowicie szybki.
Naprawdę nie chcesz tego słyszeć ... ale ...
Myślę, że to, czego potrzebujesz, to w pełni niestandardowe rozwiązanie od podstaw.
Nie musisz zadzierać ze stosem TCP / IP, ale może być konieczne opracowanie bardzo, bardzo, bardzo szybkiego serwera niestandardowego, który został zaprojektowany specjalnie do korelowania połączeń użytkowników i odpowiedniego reagowania na różne ataki.
Apache, lighthttpd itp. Doskonale nadają się do elastyczności, ale prowadzisz witrynę jednofunkcyjną i naprawdę musisz mieć możliwość zrobienia więcej niż są w stanie zrobić obecne serwery (zarówno w zakresie obsługi ruchu, jak i odpowiedniej walki z botami ).
Udostępniając w dużej mierze statyczną stronę internetową (aktualizowaną co około 30 sekund) na niestandardowym serwerze, powinieneś nie tylko być w stanie obsłużyć 10-krotnie liczbę żądań i ruchu (ponieważ serwer nie robi nic poza otrzymaniem żądania i czytaniem stronę z pamięci do bufora TCP / IP), ale zapewni również dostęp do wskaźników, które mogą pomóc spowolnić boty. Na przykład, skorelując adresy IP, możesz po prostu zablokować więcej niż jedno połączenie na sekundę na adres IP. Ludzie nie mogą jechać szybciej, a nawet ludzie używający tego samego adresu NAT NAT będą rzadko blokowani. Chciałbyś zrobić powolny blok - zostaw połączenie bez połączenia na pełną sekundę przed oficjalnym zakończeniem sesji. Może to zasilać zaporę ogniową, aby dawać długoterminowe blokady szczególnie skandalicznym przestępcom.
Ale rzeczywistość jest taka, że bez względu na to, co robisz, nie ma sposobu, aby odróżnić człowieka od bota, kiedy bota jest zbudowany na zamówienie przez człowieka w jednym celu. Bot jest jedynie proxy dla człowieka.
Wniosek
Na koniec dnia nie można odróżnić człowieka i komputera od oglądania pierwszej strony. Możesz zatrzymać boty na etapie zamawiania, ale użytkownicy botów nadal mają pierwszą przewagę w poruszaniu się i nadal masz ogromne obciążenie do zarządzania.
Możesz dodawać bloki dla prostych botów, które podniosą poprzeczkę i mniej osób będzie się tym przejmować. To może wystarczyć.
Ale bez zmiany podstawowego modelu nie masz szczęścia. Najlepsze, co możesz zrobić, to zająć się prostymi przypadkami, sprawić, by serwer tak szybko zwykli użytkownicy nie zauważyli, i sprzedawać tak wiele przedmiotów, że nawet jeśli masz kilka milionów botów, dostanie je tyle zwykłych użytkowników, ile chcesz. .
Możesz rozważyć utworzenie plastra miodu i oznaczenie kont użytkowników jako użytkowników botów, ale spowoduje to ogromny negatywny sprzeciw społeczności.
Za każdym razem, gdy myślę o „dobrze, co z robieniem tego ...” zawsze mogę temu przeciwdziałać za pomocą odpowiedniej strategii bota.
Nawet jeśli ustawisz pierwszą stronę jako captcha, aby dostać się do strony zamawiania („Przycisk zamawiania tego przedmiotu jest niebieski z różowymi iskierkami, gdzieś na tej stronie”), boty po prostu otworzą wszystkie linki na stronie i użyją dowolnego z nich powrót ze stroną zamówienia. To po prostu nie sposób na wygraną.
Spraw, by serwery działały szybko, włóż reCaptcha (jedyny, który znalazłem, którego nie można łatwo oszukać, ale prawdopodobnie jest zbyt wolny dla twojej aplikacji) na stronie zamawiania i pomyśl o sposobach nieznacznej zmiany modelu zwykli użytkownicy mają taką samą szansę jak użytkownicy botów.
-Adam
źródło
Zastrzeżenie: Ta odpowiedź jest całkowicie niezwiązana z programowaniem. Jednak w pierwszej kolejności próbuje zaatakować przyczynę skryptów.
Innym pomysłem jest to, że jeśli naprawdę masz ograniczoną ilość do sprzedaży, dlaczego nie zmienisz jej z metodologii „kto pierwszy, ten lepszy”? Chyba że szum jest częścią twojego planu marketingowego.
Istnieje wiele innych opcji i jestem pewien, że inni mogą pomyśleć o innych:
kolejka do zamawiania (system przedsprzedaży) - niektóre skrypty mogą nadal znajdować się na początku kolejki, ale prawdopodobnie szybsze jest ręczne wprowadzenie informacji.
system loterii (każdy, kto próbuje zamówić jeden, zostaje wprowadzony do systemu) - W ten sposób ludzie ze skryptami mają takie same szanse jak ci bez.
kolejka priorytetowa w pośpiechu - jeśli naprawdę postrzegana jest wysoka wartość, ludzie mogą chcieć zapłacić więcej. Zaimplementuj kolejkę zamówień, ale pozwól ludziom płacić więcej, aby być umieszczonym wyżej w kolejce.
aukcja (podziękowania dla Davida Schmitta, komentarze są moje) - Ludzie mogą nadal używać skryptów, aby wkraść się w ostatniej chwili, ale nie tylko zmienia to strukturę cen, ludzie oczekują, że będą walczyć z innymi . Możesz także robić rzeczy, aby ograniczyć liczbę ofert w danym okresie, zmusić ludzi do wcześniejszego zadzwonienia po kod autoryzacyjny itp.
źródło
Bez względu na to, jak bezpieczne były myśli nazistów w ich komunikacji, sojusznicy często łamali ich wiadomości. Bez względu na to, jak spróbujesz powstrzymać boty przed korzystaniem z witryny, właściciele botów wymyślą na to sposób. Przepraszam, jeśli to czyni cię nazistą :-)
Myślę, że wymagany jest inny sposób myślenia
Przejdź do sposobu myślenia, że nie ma znaczenia, czy klient Twojej witryny jest człowiekiem czy botem, oboje płacą tylko klientom; ale jedna ma nieuczciwą przewagę nad drugą. Niektórzy użytkownicy pozbawieni życia towarzyskiego (pustelnicy) mogą być tak samo denerwujący dla innych użytkowników witryny, jak boty.
Zapisz czas, w którym publikujesz ofertę, oraz czas, kiedy konto zdecyduje się ją kupić.
Zmieniaj porę dnia, w której publikujesz oferty.
Z czasem pojawi się zdjęcie.
01: Możesz sprawdzić, które konta regularnie kupują produkty w ciągu kilku sekund od ich uruchomienia. Sugerując, że mogą być botami.
02: Możesz także spojrzeć na okno czasowe wykorzystywane w ofertach, jeśli okno to 1 godzina, niektórzy pierwsi nabywcy będą ludźmi. Jednak człowiek rzadko odświeża się przez 4 godziny. Jeśli upływ czasu jest dość spójny między publikacją / zakupem, niezależnie od czasu trwania okna, to jest to bot. Jeśli czas publikacji / zakupu jest krótki w przypadku małych okien i wydłuża się w przypadku dużych okien, to pustelnik!
Teraz zamiast powstrzymywać boty przed korzystaniem z witryny, masz wystarczającą ilość informacji, aby powiedzieć, które konta są z pewnością wykorzystywane przez boty, a które konta prawdopodobnie będą używane przez pustelników. To, co zrobisz z tymi informacjami, zależy od Ciebie, ale z pewnością możesz użyć ich, aby uczynić swoją witrynę bardziej sprawiedliwą dla ludzi, którzy mają życie.
Myślę, że banowanie kont bota byłoby bezcelowe, byłoby to podobne do dzwonienia do Hitlera i mówienia „Dzięki za pozycje waszych łodzi podwodnych!”. Musisz w jakiś sposób wykorzystać te informacje w sposób, którego właściciele kont nie zdają sobie sprawy. Zobaczmy, czy mogę coś wymarzyć .....
Przetwarzaj zamówienia w kolejce:
Gdy klient złoży zamówienie, natychmiast otrzyma wiadomość e-mail z potwierdzeniem, że jego zamówienie zostało umieszczone w kolejce i zostanie powiadomiony o jego przetworzeniu. Tego rodzaju rzeczy są związane z zamówieniami / wysyłkami na Amazon i wcale mi to nie przeszkadza, nie mam nic przeciwko otrzymaniu e-maila kilka dni później z informacją, że moje zamówienie zostało wysłane, o ile natychmiast otrzymam wiadomość e-mail z informacją, że Amazon wie, że chcę książkę. W twoim przypadku byłby to adres e-mail
Użytkownicy myślą, że są w uczciwej kolejce. Przetwarzaj swoją kolejkę co 1 godzinę, aby normalni użytkownicy również doświadczyli kolejki, aby nie wzbudzać podejrzeń. Przetwarzaj zamówienia z kont botów i pustelników dopiero, gdy znajdą się w kolejce przez „średni czas zamawiania przez człowieka + x godziny”. Skutecznie redukuje boty dla ludzi.
źródło
Mówię, aby ujawnić informacje o cenie za pomocą interfejsu API. Jest to nieintuicyjne rozwiązanie, ale działa, aby dać ci kontrolę nad sytuacją. Dodaj pewne ograniczenia do interfejsu API, aby był on nieco mniej funkcjonalny niż strona internetowa.
Możesz zrobić to samo przy zamawianiu. Możesz eksperymentować z niewielkimi zmianami w funkcjonalności / wydajności API, aż uzyskasz pożądany efekt.
Istnieją proxy i botnety do pokonania kontroli IP. Istnieją captcha czytające skrypty, które są bardzo dobre. W Indiach są nawet zespoły robotników, którzy pokonują captchas za niewielką cenę. Każde rozwiązanie, które możesz wymyślić, może zostać rozsądnie pokonane. Nawet rozwiązania Neda Batcheldera można ominąć za pomocą kontrolki WebBrowser lub innej symulowanej przeglądarki w połączeniu z listą botnetów lub proxy.
źródło
Obecnie używamy do tego najnowszej generacji równoważników obciążenia BigIP od F5. BigIP ma zaawansowane funkcje zarządzania ruchem, które mogą identyfikować skrobaki i boty na podstawie częstotliwości i wzorców użytkowania, nawet z zestawu źródeł za jednym adresem IP. Następnie może je dławić, podawać alternatywne treści lub po prostu oznaczać je nagłówkami lub plikami cookie, aby można je było zidentyfikować w kodzie aplikacji.
źródło
Po pierwsze, pozwól mi podsumować, co musimy tutaj zrobić. Zdaję sobie sprawę, że parafrazuję pierwotne pytanie, ale ważne jest, aby uzyskać odpowiedź w 100%, ponieważ istnieje wiele świetnych sugestii, które dają 2 lub 3 z 4 poprawnie, ale jak wykażę, będziesz potrzebować wieloaspektowe podejście do wszystkich wymagań.
Wymaganie 1: Pozbycie się „trzaskania bota”:
Szybkie „trzaskanie” na pierwszej stronie ma negatywny wpływ na wydajność witryny i stanowi sedno problemu. „Trzaskanie” pochodzi zarówno od botów o pojedynczym IP, jak i - podobno - także od botnetów. Chcemy się ich pozbyć.
Wymaganie 2: Nie zadzieraj z wrażeniami użytkownika:
Moglibyśmy dość skutecznie naprawić sytuację bota, wdrażając nieprzyjemną procedurę weryfikacji, taką jak zadzwonienie do operatora, rozwiązanie pęczka CAPTCHA lub podobnego, ale to byłoby jak zmuszanie każdego niewinnego pasażera samolotu do przeskakiwania przez szalone zabezpieczenia, tylko dla małej szansy łapania najgłupszych terrorystów. Och, czekaj - faktycznie to robimy. Zobaczmy jednak, czy nie możemy tego zrobić na woot.com.
Wymaganie 3: Unikanie „wyścigu zbrojeń”:
Jak wspomniałeś, nie chcesz dać się wciągnąć w wyścig zbrojeń spamu. Nie można więc używać prostych poprawek, takich jak ukryte lub pomieszane pola formularzy, pytania matematyczne itp., Ponieważ są one w zasadzie środkami ukrytymi, które można w prosty sposób wykryć i obejść.
Wymaganie 4: Udaremnianie botów „alarmowych”:
To może być najtrudniejsze z twoich wymagań. Nawet jeśli możemy podjąć skuteczne wyzwanie weryfikacji przez człowieka, boty nadal mogą sondować twoją pierwszą stronę i ostrzec scriptera, gdy pojawi się nowa oferta. Chcemy również, aby te boty były niewykonalne. Jest to silniejsza wersja pierwszego wymagania, ponieważ boty nie tylko nie mogą wysyłać niszczących wydajność żądań szybkiego ostrzału - nie mogą nawet wydawać wystarczającej liczby powtarzających się żądań, aby wysłać „alarm” do scriptera na czas, aby wygrać Oferta.
Okej, więc sprawdźmy, czy możemy spełnić wszystkie cztery wymagania. Po pierwsze, jak wspomniałem, żaden środek nie rozwiąże problemu. Aby to osiągnąć, musisz połączyć kilka sztuczek i połknąć dwie irytacje:
Zdaję sobie sprawę, że są denerwujące, ale jeśli uda nam się sprawić, że „mała” liczba będzie wystarczająco mała , mam nadzieję, że zgodzicie się, że pozytywne wyniki przeważają nad negatywnymi.
Pierwszy środek: Ograniczanie oparte na użytkownikach:
Drugi środek: jakaś forma ograniczania IP, jak sugeruje prawie każdy:
Trzeci środek: maskowanie przepustnicy odpowiedziami w pamięci podręcznej:
Czwarty środek: reCAPTCHA:
Piąty środek: bzdury wabiące:
Szósty środek: Ograniczanie botnetów:
Dobra ............ Spędziłem większość wieczoru na myśleniu o tym, próbując różnych podejść ... globalnych opóźnień ... tokenów opartych na ciasteczkach ... serwowanie w kolejce ... „obcy dławienie”… I to po prostu nie działa. Tak nie jest. Uświadomiłem sobie, że głównym powodem, dla którego nie przyjąłeś żadnej odpowiedzi, było to, że nikt nie zaproponował sposobu udaremnienia ataku rozproszonego / zombie / botnetu ... więc naprawdę chciałem go złamać. Wydaje mi się, że złamałem problem z botnetem do uwierzytelnienia w innym wątku , więc miałem duże nadzieje na twój problem. Ale moje podejście nie przekłada się na to. Masz tylko adresy IP do przejścia, a wystarczająco duży botnet nie ujawnia się w żadnej analizie opartej na adresach IP.
Więc masz : mój szósty takt nie ma zastosowania. Nic. Zamek błyskawiczny. O ile botnet nie jest mały i / lub wystarczająco szybki, aby zostać złapanym w zwykłą przepustnicę IP, nie widzę żadnego skutecznego środka przeciwko botnetom, który nie wymagałby wyraźnej weryfikacji przez człowieka, takiej jak CAPTHA. Przykro mi, ale myślę, że połączenie powyższych pięciu miar jest najlepszym wyborem. I pewnie poradziłbyś sobie z samą 10-minutową sztuczką buforowania Abelenky'ego.
źródło
Co powiesz na wprowadzenie opóźnienia wymagającego interakcji człowieka, na przykład coś w rodzaju „gry CAPTCHA”. Na przykład może to być mała gra Flash, w której w ciągu 30 sekund muszą rozbijać kule w szachownicę i unikać pękania twardych piłek (unikając problemów z zaślepieniem kolorów!). Gra otrzyma losowy numer początkowy, a to, co gra przesyła z powrotem do serwera, to współrzędne i znaczniki czasu klikniętych punktów wraz z użytym ziarnem.
Na serwerze symulujesz mechanikę gry za pomocą tego ziarna, aby sprawdzić, czy kliknięcia rzeczywiście rozerwałyby kule. Jeśli tak, to nie tylko byli ludźmi, ale zajęli 30 sekund na sprawdzenie siebie. Daj im identyfikator sesji.
Zezwalasz temu identyfikatorowi sesji na robienie tego, co mu się podoba, ale jeśli wysyła zbyt wiele żądań, nie mogą kontynuować bez ponownego grania.
źródło
Jest już kilka innych / lepszych rozwiązań, ale dla kompletności pomyślałem, że wspomnę o tym:
Jeśli Twoim głównym zmartwieniem jest obniżenie wydajności i patrzysz na prawdziwe młotkowanie , to w rzeczywistości masz do czynienia z atakiem DoS i prawdopodobnie powinieneś spróbować odpowiednio sobie z tym poradzić. Jednym z powszechnych podejść jest po prostu upuszczanie pakietów z adresu IP w zaporze po kilku połączeniach na sekundę / minutę / itd. Na przykład standardowa zapora systemu Linux, iptables, ma standardową funkcję dopasowania operacji „hashlimit”, której można użyć do skorelowania żądań połączeń na jednostkę czasu z adresem IP.
Chociaż to pytanie byłoby prawdopodobnie bardziej odpowiednie dla następnej pochodnej SO wspomnianej w ostatnim podcastu SO, jeszcze się nie uruchomiło, więc myślę, że odpowiedź jest w porządku :)
EDYCJA:
Jak zauważył novatrust, nadal istnieją dostawcy usług internetowych, którzy NIE przypisują adresów IP swoim klientom, więc w efekcie klient skryptowy takiego dostawcy usług internetowych wyłączyłby wszystkich klientów z tego usługodawcy.
źródło
Napisz odwrotny serwer proxy na serwerze Apache przed aplikacją, która implementuje Tarpit (artykuł w Wikipedii) w celu karania botów. Po prostu zarządzałby listą adresów IP połączonych w ciągu ostatnich kilku sekund. Wykrywasz serię żądań z jednego adresu IP, a następnie gwałtownie opóźniasz te żądania przed udzieleniem odpowiedzi.
Oczywiście wielu ludzi może pochodzić z tego samego adresu IP, jeśli ma połączenie sieciowe NAT, ale jest mało prawdopodobne, że człowiek nie będzie miał nic przeciwko, że czas odpowiedzi wyniesie od 2 ms do 4 ms (lub nawet 400 ms), podczas gdy bot będzie utrudniony przez rosnące opóźnienie dość szybko.
źródło
źródło
Po pierwsze, z definicji niemożliwe jest wspieranie transakcji bezpaństwowych, czyli naprawdę anonimowych, przy jednoczesnym oddzieleniu botów od legalnych użytkowników.
Jeśli możemy zaakceptować przesłankę, że możemy nałożyć pewien koszt na nowego, zaskakującego gościa, który odwiedza jego pierwszą liczbę trafień na pierwszej stronie, myślę, że mam możliwe rozwiązanie. Z braku lepszej nazwy zamierzam swobodnie nazwać to rozwiązanie „wizytą w DMV”.
Powiedzmy, że jest salon samochodowy, który każdego dnia oferuje inny nowy samochód i że w niektóre dni możesz kupić egzotyczny samochód sportowy za 5 USD za każdy (limit 3) plus 5 USD opłaty za miejsce docelowe.
Haczyk polega na tym, że przedstawiciel handlowy wymaga wizyty u dealera i okazania ważnego prawa jazdy, zanim zostaniesz wpuszczony przez drzwi, aby zobaczyć, jaki samochód jest w sprzedaży. Co więcej, musisz mieć ważne prawo jazdy, aby dokonać zakupu.
Tak więc pierwszemu gościowi (nazywając go Bob) tego dealera samochodowego odmawia się wstępu i zostaje skierowany do biura DMV (który jest dogodnie zlokalizowany tuż obok) w celu uzyskania prawa jazdy.
Inni goście z ważnym prawem jazdy są wpuszczani po okazaniu prawa jazdy. Osoba, która dokucza sobie, włócząc się przez cały dzień, dręcząc sprzedawców, chwytając broszury i opróżniając bezpłatną kawę i ciastka, ostatecznie zostanie odwrócona.
Teraz wróć do Boba bez licencji - wszystko, co musi zrobić, to znieść wizytę w DMV raz. Następnie może odwiedzić dealera i kupić samochody w dowolnym momencie, chyba że przypadkowo zostawił portfel w domu lub jego licencja została zniszczona lub cofnięta.
Prawo jazdy na tym świecie jest prawie niemożliwe do sfałszowania.
Wizyta w DMV obejmuje najpierw pobranie formularza zgłoszeniowego w kolejce „Zacznij tutaj”. Bob musi zabrać wypełnioną aplikację do okna nr 1, gdzie pierwszy z wielu gburowatych urzędników służby cywilnej przyjmie jego wniosek, przetworzy go, a jeśli wszystko będzie w porządku, stempluje wniosek do okna i przesyła go do następnego okna. I tak Bob przechodzi od okna do okna, czekając na przejście każdego etapu aplikacji, aż w końcu dojdzie do końca i otrzyma prawo jazdy.
Nie ma sensu próbować „zwierać” DMV. Jeśli formularze nie zostaną poprawnie wypełnione w trzech egzemplarzach lub zostaną podane nieprawidłowe odpowiedzi w dowolnym oknie, aplikacja zostanie rozdarta, a nieszczęsny klient zostanie odesłany na początek.
Co ciekawe, bez względu na to, jak pełne lub puste jest biuro, obsługa zajmuje tyle samo czasu przy każdym kolejnym oknie. Nawet jeśli jesteś jedyną osobą w kolejce, wygląda na to, że personel lubi zmusić cię do oczekiwania za żółtą linią, zanim powie „Dalej!”.
Jednak w DMV nie jest tak strasznie. Podczas gdy cały proces oczekiwania i przetwarzania do uzyskania licencji trwa, możesz oglądać bardzo zabawną i pouczającą informację dla dealera samochodowego, gdy jesteś w lobby DMV. W rzeczywistości infomerical działa wystarczająco długo, aby pokryć czas poświęcony na uzyskanie licencji.
Nieco bardziej techniczne wyjaśnienie:
Jak powiedziałem na samym szczycie, konieczna jest pewna orientacja w relacji klient-serwer, która pozwala oddzielić ludzi od botów. Chcesz to zrobić w sposób, który nie będzie nadmiernie karać anonimowego (nieuwierzytelnionego) gościa.
Takie podejście prawdopodobnie wymaga przetwarzania po stronie klienta AJAX-y. Zupełnie nowy użytkownik odwiedzający woot otrzymuje „Witaj nowym użytkowniku!” strona pełna tekstu i grafiki, która (przy odpowiednim ograniczeniu po stronie serwera) zajmuje kilka sekund, aby całkowicie się załadować. Podczas gdy tak się dzieje (a użytkownik jest prawdopodobnie zajęty czytaniem stron powitalnych), jego żeton identyfikacyjny jest powoli gromadzony.
Powiedzmy, że do dyskusji token (inaczej „prawo jazdy”) składa się z 20 części. Aby uzyskać każdą kolejną część, kod po stronie klienta musi przesłać prawidłowe żądanie do serwera. Serwer zawiera celowe opóźnienie (powiedzmy 200 milisekund), przed wysłaniem kolejnej porcji wraz z „pieczątką” potrzebną do złożenia kolejnego żądania porcji (tj. Pieczęci potrzebnej do przejścia z jednego okna DMV do następnego) .Wszystko powiedziane, musi upłynąć około 4 sekund, aby zakończyć porcja wyzwanie-odpowiedź-porcja wyzwanie-odpowiedź -...- porcja wyzwanie-odpowiedź-zakończenie.
Pod koniec tego procesu odwiedzający ma token, który pozwala mu przejść do strony opisu produktu, a następnie przejść do strony zakupu. Token jest unikalnym identyfikatorem dla każdego odwiedzającego i może być używany do ograniczania jego aktywności.
Po stronie serwera akceptujesz tylko wyświetlenia stron od klientów, którzy mają prawidłowy token. Lub, jeśli ważne jest, aby wszyscy mogli ostatecznie zobaczyć stronę, nałóż karę czasową na żądania, w których brakuje ważnego tokena.
Teraz, aby było to względnie łagodne dla legalnego gościa, aby proces wydawania tokena odbywał się w tle stosunkowo nieinwazyjnie. Stąd potrzeba strony powitalnej z zabawną kopią i grafiką, która została celowo nieznacznie spowolniona.
Takie podejście zmusza przepustnicę botów do użycia istniejącego tokena lub poświęcenia minimalnej ilości czasu na przygotowanie nowego tokena. Oczywiście nie pomaga to zbytnio w przypadku wyrafinowanych ataków z wykorzystaniem rozproszonej sieci fałszywych odwiedzających.
źródło
Nie możesz całkowicie zapobiec botom, nawet za pomocą captcha. Możesz jednak sprawić, że pisanie i utrzymywanie bota będzie utrudnione, a tym samym zmniejszyć liczbę. Zwłaszcza zmuszając ich do codziennej aktualizacji botów, powodujesz, że większość traci zainteresowanie.
Oto kilka pomysłów, które mogą utrudnić pisanie botów:
Wymagaj uruchomienia funkcji javascript. JavaScript sprawia, że pisanie bota jest znacznie trudniejsze. Może wymagać captcha, jeśli nie działają javascript, aby nadal zezwalać faktycznym użytkownikom spoza javascript (minimalnie).
Czas naciskania klawiszy podczas pisania w formularzu (ponownie za pomocą javascript). Jeśli nie jest podobny do człowieka, odrzuć go. Naśladowanie pisania na maszynie przez bota to problem.
Napisz swój kod, aby codziennie aktualizować identyfikator pola o nową losową wartość. Zmusi ich to do codziennej aktualizacji bota, co jest uciążliwe.
Napisz swój kod, aby codziennie zamawiać pola ponownie (oczywiście w jakiś sposób, który nie jest przypadkowy dla użytkowników). Jeśli polegają na kolejności w terenie, spowoduje to awarię i ponownie wymusi codzienną konserwację kodu bota.
Możesz pójść jeszcze dalej i korzystać z treści Flash. Flash jest całkowicie trudny do napisania przeciwko botowi.
Ogólnie rzecz biorąc, jeśli zaczniesz myśleć o tym, by im nie zapobiegać, ale sprawić, że będzie dla nich więcej pracy, prawdopodobnie możesz osiągnąć cel, którego szukasz.
źródło
Trzymaj 5-minutowe opóźnienie we wszystkich ogłoszeniach o produktach dla niezarejestrowanych użytkowników. Przypadkowi użytkownicy tak naprawdę tego nie zauważą, a użytkownicy niekonsekwentni zostaną mimo to zarejestrowani.
źródło
Nie widzę wielkiego obciążenia, które twierdzisz, sprawdzając przychodzące adresy IP. Przeciwnie, wykonałem projekt dla jednego z moich klientów, który analizuje dzienniki dostępu HTTP co pięć minut (mogło to być w czasie rzeczywistym, ale nie chciał tego z jakiegoś powodu, którego nigdy w pełni nie rozumiałem) i tworzy reguły zapory, aby blokować połączenia z dowolnych adresów IP, które generują nadmierną liczbę żądań, chyba że adres może zostać potwierdzony jako należący do legalnej wyszukiwarki (google, yahoo itp.).
Ten klient obsługuje usługę hostingową i uruchamia tę aplikację na trzech serwerach, które obsługują łącznie 800-900 domen. Szczytowa aktywność mieści się w zakresie tysięcy trafień na sekundę i nigdy nie wystąpił problem z wydajnością - zapory ogniowe są bardzo skuteczne w usuwaniu pakietów z adresów znajdujących się na czarnej liście.
I tak, zdecydowanie istnieje technologia DDOS, która pokonałaby ten schemat, ale nie widzi tego w prawdziwym świecie. Przeciwnie, mówi, że znacznie zmniejszyło to obciążenie jego serwerów.
źródło
Moje podejście polegałoby na skoncentrowaniu się na rozwiązaniach nietechnologicznych (w przeciwnym razie bierzesz udział w wyścigu zbrojeń, który przegrasz lub przynajmniej poświęcasz dużo czasu i pieniędzy). Skoncentrowałbym się na częściach do fakturowania / wysyłki - możesz znaleźć boty, znajdując wiele dostaw na ten sam adres lub wiele opłat za jedną metodę płatności. Możesz to zrobić nawet przez kilka tygodni, więc jeśli użytkownik otrzyma poprzedni element (odpowiadając naprawdę bardzo szybko), tym razem może mu zostać przypisany jakiś „upośledzenie”.
Miałoby to również efekt uboczny (wydaje mi się, że to korzystne, ale mogę się mylić w kwestii marketingowej w twoim przypadku), być może poszerzenie kręgu ludzi, którzy mają szczęście i kupują woot.
źródło
Większość rozwiązań czysto technicznych została już zaoferowana. Dlatego zasugeruję inny pogląd na problem.
Jak rozumiem, boty są tworzone przez ludzi, którzy naprawdę próbują kupić torby, które sprzedajesz. Problemem jest -
Zamiast próbować unikać botów, możesz umożliwić potencjalnym kupującym torby subskrypcję wiadomości e-mail, a nawet aktualizacji SMS-a, aby otrzymywać powiadomienia o terminie sprzedaży. Możesz nawet dać im minutę lub dwie przewagi (specjalny adres URL, pod którym rozpoczyna się sprzedaż, losowo generowane i wysyłane pocztą / SMS-em).
Kiedy ci kupujący kupią, że są w Twojej witrynie, możesz pokazać im, co chcesz, w bocznych banerach lub cokolwiek innego. Osoby korzystające z botów wolą po prostu zarejestrować się w usłudze powiadomień.
Boty biegacze mogą nadal uruchamiać boty w powiadomieniu, aby szybciej dokończyć zakup. Niektóre rozwiązania tego mogą oferować zakup za jednym kliknięciem.
Nawiasem mówiąc, wspomniałeś, że twoi użytkownicy nie są zarejestrowani, ale wygląda na to, że ci, którzy kupują te torby, nie są przypadkowymi nabywcami, ale ludźmi, którzy czekają na tę sprzedaż. W związku z tym mogą chcieć się zarejestrować, aby uzyskać przewagę w próbie „wygrania” torby.
Zasadniczo sugeruję, aby spróbować spojrzeć na problem raczej jako społeczny niż techniczny.
Asaf
źródło
Agenty użytkownika blokujące czas, które wysyłają tak wiele żądań na minutę. Na przykład, jeśli ktoś prosi o stronę dokładnie co 5 sekund przez 10 minut, prawdopodobnie nie jest to użytkownik ... Ale może to być trudne.
Jeśli uruchomią alert, przekierowuj każde żądanie do strony statycznej z możliwie najmniejszą liczbą DB-IO, z komunikatem informującym, że zostaną ponownie włączone za X minut.
Ważne jest, aby dodać, że prawdopodobnie powinieneś stosować to tylko do żądań stron i zignorować wszystkie żądania mediów (js, obrazy itp.).
źródło
Zapobieganie atakowi DoS spowodowałoby pokonanie drugiego z celów @ davebuga, które nakreślił powyżej: „Utrzymuj prędkość witryny nie spowalnianą przez boty”, ale nie będzie musiał rozwiązać problemu nr 1, „Sprzedaj przedmiot ludziom spoza skryptów”
Jestem pewien, że skrypter mógłby napisać coś do jazdy na łyżwach tuż poniżej nadmiernego limitu, który wciąż byłby szybszy niż człowiek mógł przejść przez formularze zamówień.
źródło
W porządku, więc spamerzy rywalizują ze zwykłymi ludźmi, aby wygrać aukcję „bagno gówna”? Dlaczego nie sprawić, by kolejna aukcja była dosłownie „workiem gówna”? Spamerzy płacą niezłe pieniądze za torbę pełną psiej roboty i wszyscy się z nich śmiejemy.
źródło
Ważną rzeczą jest tutaj zmiana systemu w celu usunięcia obciążenia z serwera, zapobieganie wygrywaniu botów przez bzdury BEZ powiadamiania botlordów o tym, że nimi grasz, lub skorygują swoją strategię. Nie sądzę, aby można to zrobić bez przetwarzania na twoim końcu.
Zapisujesz więc trafienia na swojej stronie głównej. Za każdym razem, gdy ktoś trafi na stronę, to połączenie jest porównywane z ostatnim działaniem, a jeśli było ono zbyt szybkie, wysyłana jest wersja strony bez oferty. Można tego dokonać za pomocą mechanizmu równoważenia obciążenia, który wysyła boty (zbyt szybkie działania) na serwer, który po prostu obsługuje buforowane wersje strony głównej; prawdziwi ludzie są wysyłani na dobry serwer. To odciąża główny serwer i sprawia, że boty myślą, że nadal są poprawnie wyświetlane na stronach.
Nawet lepiej, jeśli ofertę można w jakiś sposób odrzucić. Następnie możesz nadal składać oferty na fałszywym serwerze, ale kiedy bot wypełni formularz, powiedz „Przepraszam, nie byłeś wystarczająco szybki” :) Wtedy na pewno będą myśleć, że nadal są w grze.
źródło
Skąd wiesz, że skrypty składają zamówienia?
Sedno twojego problemu polega na tym, że nie możesz oddzielić skryptów od legalnych użytkowników, a zatem nie możesz ich zablokować, więc skąd wiesz, że w ogóle są skrypty?
Jeśli potrafisz odpowiedzieć na to pytanie, masz zestaw cech, których możesz użyć do filtrowania skryptów.
źródło
Odwróćmy ten problem od głowy - masz boty kupujące rzeczy, które chcesz kupić od prawdziwych ludzi, co powiesz na zrobienie prawdziwej szansy, że boty kupią rzeczy, których nie chcesz, aby kupowali je prawdziwi ludzie.
Mają losową szansę na wyświetlenie html, który boty skrobiące będą uważać za prawdziwą sytuację, ale prawdziwi ludzie nie zobaczą (i nie zapominaj, że prawdziwi ludzie obejmują osoby niewidome, więc weź także pod uwagę czytniki ekranu itp.), Oraz to prowadzi do zakupu czegoś wyjątkowo drogiego (lub nie dokonuje faktycznego zakupu, ale dostaje szczegóły płatności, które możesz umieścić na liście banów).
Nawet jeśli boty przestawią się na „ostrzeganie użytkownika” zamiast „dokonaj zakupu”, jeśli dostaniesz wystarczającą liczbę fałszywych alarmów, możesz być w stanie uczynić go wystarczająco bezwartościowym dla ludzi (może nie dla wszystkich, ale pewna redukcja oszustwa jest lepiej niż wcale) nie zawracać sobie głowy.
źródło