Powstrzymywanie skryptów przed trzaskaniem twojej witryny

489

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:

  1. Twoja strona została zablokowana przez nie-ludzi, spowalniając wszystko dla wszystkich.
  2. 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

  1. Sprzedaj przedmiot ludziom bez skryptów.
  2. Utrzymuj działanie strony z prędkością nie spowalnianą przez boty.
  3. Nie kłopotaj „normalnych” użytkowników jakimikolwiek zadaniami do wykonania, aby udowodnić, że są ludźmi.
Dave Rutledge
źródło
1
Myślę, że masz sprzeczne cele: Utrzymanie doświadczenia dokładnie tak, jak jest, ale pozbądź się botów. Myślę, że nie możesz zdobyć jednego, nie poświęcając części drugiego.
maks.
Jest to wiki społeczności, więc nie krępuj się, ale przeważnie starałem się wyjaśnić każdy punkt tak wyraźnie, jak tylko mogłem, biorąc pod uwagę, że są oczywiste rzeczy, które próbowaliśmy i które przeceniliśmy.
Dave Rutledge
Dlaczego nie po prostu zbuforować powtarzających się przestępców, po prostu nie aktualizuj strony, o którą wielokrotnie proszą. Adresy IPv4 i MAC to łącznie 32 + 48 bitów. To 10 MB na 1 milion użytkowników, nie powinno stanowić problemu. Połączenie IPv4 i MAC powinno pomóc w dokładniejszym śledzeniu wszystkich rodzajów użytkowników
John Leidegren,
4
Naprawdę nie rozumiem, dlaczego musisz pozwolić anonimowym użytkownikom zobaczyć bzdury. Dlaczego nie oferujesz go tylko zalogowanym użytkownikom? Jeśli to zrobisz, nieznani użytkownicy nie będą często odwiedzać strony, a następnie zablokują złych użytkowników.
Ryan Guill
1
Myślę, że niektórym ludziom brakuje tutaj kluczowego czynnika: te boty są skonfigurowane do logowania i zakupu. Znają prawidłowe konto i MOŻNA się zalogować. Ponadto, prawdziwi ludzie używający Woot siedzą tam, gdy tylko pojawi się jakiś przedmiot i naciskają F5, aby przeładowywać co 2-5 sekund. To jest prawidłowe normalne użytkowanie przez ludzi.
CodingWithSpike

Odpowiedzi:

229

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.

lc.
źródło
13
Google stosuje to samo podejście i mają tylko adresy IP, aby kontynuować. Często w pracy dostaję CAPTCHA, zanim będę mógł wyszukiwać w Google, ponieważ widzą zachowania podobne do botów z tego samego adresu IP. Myślę, że takie podejście (CAPTCHA po zachowaniu przypominającym bota) jest najlepsze, co możesz uzyskać.
Ross
7
Już google prosił mnie o CAPTCHA, ale to była moja wina - używałem ich jako kalkulatora, robiąc dziesiątki prawie identycznych sum.
Marcus Downing
Opcja CAPTCHA brzmi dla mnie jak zwycięzca. Ciężko ranisz botów i jeśli jesteś dobrze zrównoważony, nigdy nie powinieneś wchodzić w posiadanie legalnych użytkowników.
xan
Zamiast blokować ludzi i korzystać z rozmowy telefonicznej, możesz wygenerować tymczasowy adres e-mail, taki jak [email protected], ale wygenerować przednią część z obrazem.
Sam
To też może zadziałać, chyba że boty po prostu przyzwyczają się do systemu i mogą zeskrobać adres e-mail. Chodzi mi o to, że rozmowa telefoniczna wymusza interakcję człowieka i wymaga od użytkownika bezpośredniego wyjaśnienia się głosem. Właściciele botów prawdopodobnie nie chcą tego robić.
lc.
193

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ść.

Christopher Mahan
źródło
12
Co się stanie, jeśli zwrócą produkty lub zwrócą obciążenie? Może to cię kosztować, a obciążenia zwrotne mogą zaszkodzić Twojej firmie dzięki procesorom kart kredytowych. Boty prawdopodobnie również używają skradzionych kart, ale może to zaostrzyć poziom obciążeń zwrotnych, ponieważ wyższe kwoty będą częściej kwestionowane.
Tai Squared
13
Nie obciążaj ich, ale oznaczaj je jako boty, szczególnie za próbę zakupu przedmiotu. Jeśli jakieś ciało kupi telefoniczny przedmiot, po prostu zaznacz je jako bot i odrzuć je. Prawdopodobnie możesz je po prostu zamknąć na kilka godzin.
Kibbee,
4
Ma to poważną wartość komediową, dopóki nie rozgniewasz skrypciarza, który akurat ma więcej umiejętności niż tylko skrobanie woot, i powoduje poważne problemy, ponieważ go oderwałeś.
MattBelanger,
2
Jeśli dzieciak ze scenariusza się zdenerwuje, może po prostu wystawić się na tyle, abyś mógł je oznaczyć i przekazać organom ścigania.
Jacco
9
sqook: nie jest to rozwiązanie technologiczne, ale rozwiązanie rzeczywiste. To samo dotyczy umieszczania ochroniarzy z bronią w bankach. To może wydawać się twarde, ale podobnie jak oszuści, więc bądź twardy. Rani ich tam, gdzie boli, dopóki się nie zatrzymają.
Christopher Mahan
162

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ł:

  • Zaloguj się i zidentyfikuj powtarzających się hitterów.

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:

  • Bez kłopotów i problemów dla użytkowników (takich jak CAPTCHA).
  • W pełni zaimplementowane po stronie serwera. (brak polegania na JavaScript / Flash)
  • Podanie starszej strony z pamięci podręcznej powinno być mniej wydajne niż strona działająca. W ten sposób możesz faktycznie zmniejszyć obciążenie serwerów!

Wady

  • Wymaga śledzenia niektórych adresów IP
  • Wymaga przechowywania i utrzymywania pamięci podręcznej starszych stron.

Co myślisz?

abelenky
źródło
1
Cholera. Właśnie spędziłem półtorej godziny, pisząc własny schemat pięciu woot, a po długim i intensywnym zastanowieniu się nad piątym środkiem zaradczym (przepustnicą botnetu) musiałem przyznać się do porażki. To nie działa Reszta mojego godzinnego rozwiązania to - cóż, to. abelenky, daję ci czapkę
Jens Roland
7
Aby to uzupełnić: umieść adresy IP w pamięci LRU liczącej w pamięci (zwiększaj i przesuwaj do góry przy każdym powrocie adresu IP). Dodaj heurystykę w oparciu o informacje o odwrotnym IP, aktywność, pobieranie obrazu / js / cookie. Skaluj swoją odpowiedź według stopnia ataku, minimalizując konsekwencje fałszywych negatywów.
SquareCog
1
(ciąg dalszy :) A moja technika nikogo nie blokuje. Po prostu daje im opóźnione informacje. Nikt w biurze nie może wygrać nagrody, ale z punktu widzenia obsługi klienta / dostępności nie stanowi to większego problemu.
abelenky
18
@bruceatk: Jeśli dasz im specjalną stronę przeznaczoną tylko dla botów, w końcu nauczą się ją wykrywać i dokładniej sfałszować zwykłego klienta. Podając starą stronę, nie będą mieć ŻADNEGO POMYSŁU na to, że otrzymują stare dane. Stare dane są zgodne z prawem! Jest po prostu bezużyteczny do celów konkursowych / wyścigowych.
abelenky
1
Ogromne podziękowania dla tych, którzy głosowali za moim pomysłem. Mimo że nagroda się skończyła, myślę, że ten pomysł ma wiele zalet, ponieważ jest łatwiejszy do wdrożenia niż captcha, rzadziej nęka ludzi i częściej udaremnia roboty. Mam nadzieję, że ktoś spróbuje tego na jakiejś stronie internetowej.
abelenky
54

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.

Zamiast zatrzymywać boty poprzez identyfikowanie się przez ludzi, możemy zatrzymać boty, utrudniając im wykonanie udanego postu lub przez przypadkowe identyfikowanie się jako boty. To usuwa ciężar z ludzi i pozostawia formularz komentarza wolny od widocznych środków antyspamowych.

Dzięki tej technice zapobiegam robotom spamującym na tej stronie. To działa. Opisana tutaj metoda w ogóle nie uwzględnia treści.

Inne pomysły:

  • Utwórz oficjalny mechanizm automatycznego powiadamiania (kanał RSS? Twitter?), Który użytkownicy mogą subskrybować, gdy Twój produkt trafi do sprzedaży. Zmniejsza to potrzebę tworzenia skryptów przez ludzi.
  • Zmień technikę zaciemniania tuż przed wprowadzeniem nowego produktu do sprzedaży. Nawet jeśli scenarzyści mogą eskalować wyścig zbrojeń, zawsze są o jeden dzień w tyle.

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:

Błystka jest ukrytym polem używanym do kilku rzeczy: łączy w sobie szereg wartości, które zapobiegają manipulowaniu i powtórkom, oraz służy do ukrywania nazw pól. Spinner to skrót MD5:

  • Znacznik czasu,
  • Adres IP klienta,
  • Identyfikator wpisu na blogu, który jest komentowany, oraz
  • Sekret.

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):

  • Użyj klas CSS (oczywiście losowo), aby ustawić pola lub element zawierający do wyświetlenia: brak.
  • Pokoloruj pola tak samo (lub bardzo podobnie) do tła strony.
  • Użyj pozycjonowania, aby przesunąć pole poza widoczny obszar strony.
  • Zrób element zbyt mały, aby pokazać zawarte w nim pole typu plaster miodu.
  • Pozostaw pola widoczne, ale użyj pozycjonowania, aby zakryć je zasłaniającym elementem.
  • Użyj Javascript, aby wprowadzić dowolną z tych zmian, wymagając od bota posiadania pełnego silnika JavaScript.
  • Pozostaw honeypoty wyświetlane tak jak inne pola, ale powiedz innym, aby niczego nie wprowadzali.

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? :)

BradC
źródło
+1 dla RSS. Spraw, aby legalni użytkownicy byli nagradzani.
Marcus Downing
RSS wydaje się dobrym rozwiązaniem, ale czy może to zaszkodzić dochodom z reklam, od których, jak sądzę, zależy ta witryna?
TM.
1
Nie do końca rozumiem pojęcie „spinner”. Czy to tylko dodatkowy element danych, który jest umieszczony w pliku HTML <form>i wysyłany po przesłaniu? Ponieważ bot również może to łatwo zeskrobać.
Ponkadoodle,
44

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 -

  • wygeneruj obraz (oczywiście z pamięci podręcznej), gdy strona zostanie wyświetlona
  • zachowaj nazwę źródła obrazu taką samą, aby nie zdradzić gry
  • przez większość czasu obraz będzie zawierał zwykły tekst i będzie wyrównany tak, aby wyglądał, jakby był częścią wbudowanej strony HTML
  • gdy gra jest „włączona”, obraz zmienia się w tekst ogłoszenia
  • tekst ogłoszenia ujawnia adres URL i / lub kod, który należy wprowadzić ręcznie, aby otrzymać nagrodę. CAPTCHA kod, jeśli chcesz, ale prawdopodobnie nie jest to konieczne.
  • dla dodatkowego bezpieczeństwa kod może być jednorazowym tokenem generowanym specjalnie dla żądania / adresu IP / agenta, dzięki czemu wielokrotne żądania generują różne kody. Możesz też wstępnie wygenerować kilka losowych kodów (pad jednorazowy), jeśli generowanie na żądanie jest zbyt obciążające.

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ą

Steven A. Lowe
źródło
1
Upewniłbym się, że zmieni się również „tekst domyślny”. Zapobiegnie to po prostu porównywaniu obrazu przez aplikację zgarniającą z poprzednim obrazem i oczekiwaniu na znaczącą zmianę. +1. Świetny pomysł.
Frank Krueger,
1
Poprawka do „ostatecznej sugestii”: Jeśli drugie żądanie przychodzi z adresu, podczas gdy poprzednie żądanie z tego samego adresu jest w toku, odrzuć pierwsze żądanie i umieść drugie w kolejce. Będzie to działać jako kara za wbicie witryny zamiast pozwalania na załadowanie strony.
Dave Sherohman,
@ [Frank Krueger]: Myślałem, że implikowałem to, ale po ponownym przeczytaniu chyba tego nie zrobiłem - dziękuję za zwrócenie na to uwagi! Przydatna może być również zmiana domyślnego obrazu tekstowego tylko o kilka pikseli, aby zepsuć porównania i / lub wygenerować prawie niewidoczny tekst w stylu znaku wodnego, aby dalej zadzierać z botami
Steven A. Lowe
@ [Dave Sherohman]: możesz, ale może to spowodować, że kolejka się odejdzie; może lepiej po prostu odrzucić nowe żądania natychmiastowego zrzucenia obciążenia - testowanie / profilowanie powiedziałoby na pewno, co jest lepsze, ale dziękuję za dobrą sugestię!
Steven A. Lowe
Nie mogę tego znieść, że kazałeś mu się zasadniczo poddać, wiem, że uważasz, że to niemożliwe, ale nie zgadzam się. Jeśli istnieje wola, zawsze istnieje sposób. Tak łatwe przyznanie się do porażki jest naprawdę mało inspirujące i zasmucające. Jeśli plakat orig czyta, można to zrobić, ale po analizie logów drogowych rozwiązanie będzie musiało zostać zaprojektowane na zamówienie, można zapobiec obecnym metodom i udowodnić, że w przyszłości można tego uniknąć nieużywane metody. Również jeśli chodzi o JavaScript, kontrolka przeglądarki uruchamia JavaScript w czasie rzeczywistym, bez potrzeby używania innego silnika - mogą zepsuć się z Domem i uruchomić własny JavaScript! Opps
Erx_VB.NExT.Coder
30

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.

Zac Thompson
źródło
Nie myśl, że wkurzanie botów jest pożądane, ale masz tutaj ciekawy pomysł.
Shawn Miller,
7
Zgadzam się i podoba mi się ten powtarzający się pomysł oszukiwania botów w dokonywanie fałszywych zakupów. To zwrot, a ponieważ już łamią Regulamin, nie mogą narzekać.
Nicholas Flynt
22

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.

Owidiusz
źródło
15
  1. Sprzedaj przedmiot ludziom bez skryptów.

  2. Utrzymuj działanie strony z prędkością nie spowalnianą przez boty.

  3. Nie kłopotaj „normalnych” użytkowników jakimikolwiek zadaniami do wykonania, aby udowodnić, że są ludźmi.

Prawdopodobnie nie chcesz tego słyszeć, ale # 1 i # 3 wzajemnie się wykluczają.

W Internecie nikt nie wie, że jesteś psem

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.

Chris Upchurch
źródło
+1, bo jeśli tego chcą, captcha ich nie powstrzyma ... i kreskówki.
Martin
13

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:

  1. Oglądam pierwszą stronę
  2. Zamawianie

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

Adam Davis
źródło
„Za każdym razem, gdy myślę o„ dobrze, co z robieniem tego… ”zawsze mogę temu przeciwdziałać za pomocą odpowiedniej strategii bota” Doszedłem do tego samego wniosku podczas projektowania mojego systemu uwierzytelniania, ALE - tutaj jest jedna różnica każe mi wątpić w tę logikę: fałszywe alarmy nie stanowią dużego problemu
Jens Roland
(ciąg dalszy) Np. jeśli kilku prawdziwych użytkowników tutaj nie jest w stanie uzyskać ofert specjalnych, to w rzeczywistości nie jest to wielki przełom (o ile nie wiedzą, czego brakuje). W systemie uwierzytelniania jest to łamigłówka - nie chcesz, aby użytkownicy nie mogli się zalogować
Jens Roland
(ciąg dalszy) Oznacza to, że możesz zaprojektować system Woot tak, aby był bardziej restrykcyjny niż „tradycyjne” środki przeciwdziałające robotom spamującym i z tego powodu możesz być w stanie skutecznie udaremnić boty.
Jens Roland
(jednak teraz, gdy zastanowiłem się nad tym, nie mogę wymyślić sposobu, który działa, który również udaremnia ataki rozproszone / botnety)
Jens Roland
11

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.

lc.
źródło
1
Dziękuję Ci. Widzisz, wiedziałem, że są inni.
lc.
każdy system loterii zostanie po prostu przeciążony, aby zwiększyć szanse na korzyść bota
Andy Dent
Nie, jeśli ograniczysz go do jednego adresu na osobę / gospodarstwo domowe / (fizyczny), to nie będzie
lc.
11

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

  • Nie próbuj powstrzymywać botów przed korzystaniem z witryny
  • Nie idź do poprawki, która działa natychmiast, zagraj w długą grę

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ć.

Daje to zapis, jak szybko klient kupuje rzeczy.

Zmieniaj porę dnia, w której publikujesz oferty.

Na przykład, okno 3-godzinne zaczyna się o niejasnej porze dnia (północ?) Tylko boty i pustelnicy będą stale odświeżać stronę przez 3 godziny, aby w ciągu kilku sekund otrzymać zamówienie. Nigdy nie zmieniaj czasu bazowego, tylko rozmiar okna.

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

  1. Twoje zamówienie zostało złożone i znajduje się w kolejce.
  2. Twoje zamówienie zostało przetworzone.
  3. Twoje zamówienie zostało wysłane.

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.

Peter Morris
źródło
Co to znaczy? :-)
Peter Morris
Ach, dzięki :-) Wspominam o nazistach, ponieważ bardzo interesują mnie historie II wojny światowej o parku Bletchley :-) Niektóre historie o tym, jak wiadomości zostały zerwane, wykorzystywały inne mentalne podejście do problemu, na przykład zakładając, że operatorzy byli zbyt leniwi, aby zmienić kody z poprzedniej nocy :-)
Peter Morris
10

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.

Robert Venables
źródło
8

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.

ozy
źródło
To jest dokładnie rozwiązanie, które zamierzałem zaproponować, zwłaszcza automatyczne dławienie. Możesz rzucić własne, po prostu polega na regularnej do zaawansowanej analizie sygnału.
wds,
7

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:

  1. Niewielka liczba użytkowników będzie musiała przejść przez obręcze
  2. Niewielka liczba użytkowników nie będzie mogła uzyskać ofert specjalnych

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:

Ten jest oczywisty i jestem pewien, że już to robisz. Jeśli użytkownik jest zalogowany i odświeża się 600 razy na sekundę (lub coś takiego), przestajesz odpowiadać i każesz mu to ochłodzić. W rzeczywistości prawdopodobnie wcześniej dławisz jego prośby, ale masz pomysł. W ten sposób zalogowany bot zostanie zbanowany / zdławiony, gdy tylko zacznie sondować Twoją witrynę. To jest łatwa część. Nieuwierzytelnione boty są naszym prawdziwym problemem, więc im:

Drugi środek: jakaś forma ograniczania IP, jak sugeruje prawie każdy:

Nie ważne co, trzeba będzie zrobić jakieś IP w oparciu dławienie udaremnić „trzaskanie bot”. Ponieważ wydaje się dla ciebie ważne, aby umożliwić nieuwierzytelnionej (nie zalogowany) odwiedzających, aby uzyskać specjalne oferty, trzeba tylko przejść przez IP do początkowo, i choć nie są one doskonałe, oni zrobić pracę przed robotami pojedynczym IP. Botnety to inna bestia, ale wrócę do nich. Na razie zrobimy proste dławienie, aby pokonać szybkie strzały pojedynczych botów.

Trafienie w wydajność jest nieistotne, jeśli uruchomisz sprawdzanie adresu IP przed wszystkimi innymi przetwarzaniami, użyjesz serwera proxy dla logiki dławienia i zapiszesz adresy IP w strukturze drzewa zoptymalizowanej pod kątem pamięci podręcznej.

Trzeci środek: maskowanie przepustnicy odpowiedziami w pamięci podręcznej:

Przy dławionych szybkich botach z pojedynczym IP nadal musimy zająć się powolnymi botami z pojedynczym IP, tj. boty, które są specjalnie dostosowywane do „latania pod radarem” poprzez rozstawianie żądań nieco dalej od siebie, niż zapobiega dławienie.

Aby natychmiast sprawić, że powolne boty z jednym adresem IP będą bezużyteczne, po prostu skorzystaj ze strategii sugerowanej przez abelenky: podaj 10-minutowe strony z pamięci podręcznej dla wszystkich adresów IP, które zostały zauważone w ciągu ostatnich 24 godzin (lub mniej więcej). W ten sposób każde IP otrzymuje jedną „szansę” na dzień / godzinę / tydzień (w zależności od wybranego okresu) i nie będzie widocznej irytacji dla prawdziwych użytkowników, którzy dopiero zaczynają „przeładowywać”, z tym wyjątkiem, że nie wygrywają Oferta.

Piękno tego środka polega na tym, że grozi również „botami alarmowymi”, o ile nie pochodzą one z botnetu.

(Wiem, że prawdopodobnie wolałbyś, gdyby prawdziwym użytkownikom pozwalano na odświeżanie w kółko, ale nie ma sposobu, aby odróżnić człowieka od spamowania od bota rozsyłającego żądania bez CAPTCHA lub podobnego)

Czwarty środek: reCAPTCHA:

Masz rację, że CAPTCHA mają negatywny wpływ na wygodę użytkownika i należy tego unikać. Jednak w jednej sytuacji mogą być twoim najlepszym przyjacielem: Jeśli zaprojektowałeś bardzo restrykcyjny system, aby udaremniać boty, które - ze względu na swoją restrykcyjność - wychwytują również wiele fałszywych alarmów; wtedy CAPTCHA służy jako ostateczność pozwoli tym prawdziwym użytkownikom, którzy zostaną złapani, wymknąć się przez twoje dławienie (unikając w ten sposób irytujących sytuacji DoS).

Słabym punktem jest oczywiście to, że WSZYSTKIE boty zostają złapane w twoją sieć, podczas gdy bardzo niewielu prawdziwych użytkowników przeszkadza CAPTCHA.

Jeśli podczas wyświetlania dziesięciominutowych stron w pamięci podręcznej oferujesz również alternatywne, opcjonalne „odświeżanie strony głównej”, zweryfikowane przez CAPTCHA, to ludzie, którzy naprawdę chcą się odświeżać, nadal mogą to robić bez pobierania starej strony z pamięci podręcznej , ale kosztem rozwiązania CAPTCHA dla każdego odświeżenia. Jest to irytujące, ale opcjonalne tylko dla zagorzałych użytkowników, którzy zwykle bardziej wybaczają, ponieważ wiedzą, że grają w system, aby zwiększyć swoje szanse i że lepsze szanse nie są darmowe.

Piąty środek: bzdury wabiące:

Christopher Mahan wpadł na pomysł, który raczej mi się podobał, ale postaram się go inaczej. Za każdym razem, gdy przygotowujesz nową ofertę, przygotuj również dwie inne „oferty”, których żaden człowiek nie wybrałby, na przykład 12 mm skrzydło za 20 USD. Gdy oferta pojawi się na stronie głównej, umieść wszystkie trzy „oferty” na tym samym zdjęciu, z numerami odpowiadającymi każdej ofercie. Kiedy użytkownik / bot faktycznie zamawia przedmiot, będzie musiał wybrać (przycisk opcji), którą chce, a ponieważ większość botów zgaduje, w dwóch z trzech przypadków boty kupują bezwartościowe dżonka.

Oczywiście nie dotyczy to „botów alarmowych” i istnieje (niewielka) szansa, że ​​ktoś może zbudować bota, który byłby w stanie wybrać odpowiedni przedmiot. Jednak ryzyko przypadkowego zakupu śmieci powinno spowodować, że skrypty całkowicie odwrócą się od w pełni zautomatyzowanych botów.

Szósty środek: Ograniczanie botnetów:

[usunięty]

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.

Jens Roland
źródło
Bardzo dobrze powiedziane. Dzięki za wkład.
Shawn Miller
nie 3. oznacza, że ​​podajesz stare strony do wszystkich AOL, zakładając, że kilka botów pochodzi z puli IP AOL?
Andy Dent,
@Andy: Tylko jeśli wszyscy użytkownicy AOL korzystają z tych samych adresów IP, których używali boty podczas spamowania.
Jens Roland
6

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.

Paul Dixon
źródło
Zabawny pomysł, ale całkowicie i całkowicie rujnujący wrażenia użytkownika. Normalni ludzie odwiedzający stronę będą myśleć o niej jako o 30 sekundach bezużytecznego oczekiwania. 30 sekund bezużytecznego oczekiwania podczas przeglądania Internetu lub korzystania z aplikacji internetowych jest w żaden sposób nie do przyjęcia.
Arve Systad
zwykli odwiedzający nie spowodowaliby opóźnienia, tylko ktoś wysyła nieuzasadnioną liczbę próśb. Pomysł jest trochę język w policzek, ale widzę, że działa, jeśli docelowi odbiorcy są przyzwyczajeni do małych gier flash :)
Paul Dixon
Zabawny (i prawie niezawodny) pomysł, ale byłbym zirytowany (szczególnie podczas szaleństwa Bag Of Canary), a to wymagałoby znacznie więcej przetwarzania na ich serwerach, aby wykonać sprawdzanie (co jest dużą częścią problemu). Ponadto boty mogą pękać bańki. Będziesz musiał często zmieniać zasady.
Groxx,
Zakładając, że każda gra ma wydany token i znasz czas, w którym wydałeś token, musisz tylko spróbować przetworzyć token raz, a tylko między 30 a 300 sekund po jego wydaniu. Piękno polega na tym, że nawet jeśli bot pęknie, nadal czekał na to 30 sekund.
Paul Dixon,
Ponadto nie zapominajmy, że chodzi o ograniczenie ruchu. Strona może powiedzieć „jesteśmy bardzo zajęci, jeśli się spieszysz, zagraj w tę grę przez 30 sekund lub spróbuj ponownie za kilka minut ...
Paul Dixon
5

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.

ikry
źródło
Niestety niektórzy dostawcy usług internetowych udostępnili wyjściowe adresy IP. Na przykład AOL ma ograniczoną kolekcję adresów IP, pod którymi członkowie wyświetlają się pod adresem : webmaster.info.aol.com/proxyinfo.html Twoje rozwiązanie narzuciłoby twarde ograniczenie liczby użytkowników dla wielu dostawców usług internetowych.
Robert Venables,
Wow, jestem zachwycony. Takie rzeczy wciąż się toczą?
falstro
Święta krowa. Wydaje mi się, że AOL nie uzyska wtedy dostępu do mojej witryny.
Karl
5

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.

Denis Hennessy
źródło
4
  1. Podaj kanał RSS, aby nie pochłonął przepustowości.
  2. Kupując, każ każdemu czekać losowo do 45 sekund lub coś, w zależności od tego, czego dokładnie szukasz. Dokładnie jakie są twoje ograniczenia czasowe?
  3. Daj wszystkim 1 minutę na wpisanie nazwiska na rysunek, a następnie losowe wybranie osób. Myślę, że to najlepszy sposób.
  4. Monitorować konta (uwzględnić niektóre sesje i zapisać je?) I dodawać opóźnienia do kont, które wydają się być poniżej progu ludzkiej prędkości. To przynajmniej sprawi, że boty zostaną zaprogramowane do spowolnienia i konkurowania z ludźmi.
Joe Philllips
źródło
Są to ciekawe koncepcje, ale „losowy wybór” i okres oczekiwania usuwa wiele „szaleństwa”, które, jak sądzę, zależy od woot. Zabranie pilnej synchronizacji zrujnowało witrynę.
TM.
Jeśli wygląda to na losowanie, musi zająć się prawem hazardowym. Nie jest tego warte.
jmucchiello,
4

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.

Producent zabawek
źródło
4

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.

jwanagel
źródło
Ludzie czasem jednak angażują się w pisanie na maszynie innej niż człowiek - wypełniacze formularzy.
Loren Pechtel
Musisz pozwolić na bardzo różne style / prędkości pisania - wszystko od polowania na dziobanie po dotykanie. Nie jest trudno napisać bota, który mieści się gdzieś pomiędzy. Rzeczy takie jak zmienne identyfikatory pól i porządek można obejść, czytając i analizując formę, co nie jest bardzo trudne.
Kornel
4

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.

Brian
źródło
3

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.

Dave Sherohman
źródło
3

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.

Shachar
źródło
3

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 -

  1. Inne osoby, które nie obsługują botów, zasługują na szansę zakupu, a ty oferujesz ograniczoną liczbę toreb.
  2. Chcesz przyciągnąć ludzi do swojej witryny i po prostu sprzedać torby.

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

Asaf R.
źródło
2

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.).

Oli
źródło
Zrobiłem to w osobistym projekcie, wydaje się, że to dobra metoda. Musisz tylko pamiętać wszystkie adresy IP, gdy trafiają one na twoją stronę, i skonfigurować reguły, które oznaczają zbyt częste odwiedzanie strony. Problem polega na tym, że OP powiedział, że sprawdzanie adresów IP jest zbyt drogie, czego nie rozumiem.
Karl
Jeśli sam zaimplementujesz sprawdzanie adresu IP (np. W bazie danych, ze skryptu PHP lub cokolwiek innego), będzie to dość kosztowne. Zapora ogniowa zrobi to za Ciebie, a staje się znacznie bardziej wykonalna.
rmeador
rmeador: Wydaje się również, że znacznie trudniej byłoby ustalić, czy żądanie dotyczyło HTML, czy innych mediów. Jeśli masz na swojej stronie 20 elementów zewnętrznych, patrzysz na co najmniej 21 próśb o nowego użytkownika w ciągu 1-2 sekund.
Oli
2

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ń.

Shawn Miller
źródło
2

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.

1800 INFORMACJI
źródło
2

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.

Chris Latta
źródło
2

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.

Bret Walker
źródło
2

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.

Cebjyre
źródło