Próbuję wymyślić wystarczająco dobry mechanizm antyspamowy, aby zapobiec automatycznemu generowaniu danych wejściowych. Czytałem, że techniki takie jak captcha, 1 + 1 =? rzeczy działają dobrze, ale stanowią również dodatkowy krok utrudniający bezpłatne szybkie korzystanie z aplikacji (nie szukam czegoś takiego, proszę).
Próbowałem ustawić kilka ukrytych pól we wszystkich moich formularzach, display: none;
ale jestem pewien, że można skonfigurować skrypt, aby śledzić ten identyfikator pola formularza i po prostu go nie wypełniać.
Czy wdrażasz / znasz dobrą metodę zapobiegania automatycznemu wypełnianiu formularzy przez roboty? Czy jest coś, co można zrobić bezproblemowo za pomocą przetwarzania HTML ORAZ / LUB po stronie serwera i być (prawie) kuloodporne? (bez JS, bo można by go po prostu wyłączyć).
Staram się nie polegać na sesjach w tym celu (tj. Liczeniu, ile razy przycisk został kliknięty, aby zapobiec przeciążeniom).
Odpowiedzi:
Łatwym do wdrożenia, ale nie niezawodnym (zwłaszcza w przypadku „określonych” ataków) sposobem rozwiązania problemu antyspamowego jest śledzenie czasu między przesłaniem formularza a załadowaniem strony.
Boty żądają strony, analizują ją i wysyłają formularz. To jest szybkie.
Ludzie wpisują adres URL, ładują stronę, czekają, aż strona zostanie w pełni załadowana, przewiń w dół, przeczytaj treść, zdecyduj, czy skomentują / wypełnią formularz, potrzebują czasu na wypełnienie formularza i prześlij.
Różnica w czasie może być subtelna; i jak śledzić ten czas bez plików cookie, wymaga jakiegoś sposobu bazy danych po stronie serwera. Może to mieć wpływ na wydajność.
Musisz także dostosować czas progowy.
źródło
Właściwie uważam, że proste pole Honey Pot działa dobrze. Większość botów wypełnia wszystkie pola formularza, które widzą, mając nadzieję na obejście wymaganych walidatorów pól.
http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
Jeśli utworzysz pole tekstowe, ukryjesz je w javascript, a następnie zweryfikujesz, że wartość jest pusta na serwerze, to wyeliminuje 99% robotów i nie powoduje żadnej frustracji u 99% użytkowników . Pozostały 1% osób, które mają wyłączoną obsługę JavaScript, nadal będzie widzieć pole tekstowe, ale w takich przypadkach możesz dodać wiadomość typu „Zostaw to pole puste” (jeśli w ogóle Ci na nich zależy).
(Zauważ też, że jeśli na polu wpiszesz style = "display: none", robot będzie o wiele za łatwo to zobaczyć i odrzucić pole, dlatego wolę podejście javascript).
źródło
A co jeśli - bot w ogóle nie znajdzie
form
?3 przykłady:
Utwórz
form.html
i umieśćform
wewnątrz<div id="formContainer">
elementu.Wewnątrz strony, na której musisz wywołać ten formularz, użyj pustego
<div id="dynamicForm"></div>
i tego jQuery:$("#dynamicForm").load("form.html #formContainer");
$_POST["email"]
powinno być puste (bez żadnej wartości)! W przeciwnym razie nie przesyłaj formularza.<input name="sender" type="text" placeholder="Your email">
po (!) W „bot przynętę” wejścia do rzeczywistego adresu e-mail użytkownika.Podziękowanie:
Developer.Mozilla - Wyłączanie autouzupełniania formularzy
StackOverflow - Ignoruj Tabindex
źródło
autocomplete=nope
że domyślnieon
;-) MDN: wejście # attr-autocompleteautocomplete="oh sunny day"
o tym pisać .To, co zrobiłem, to użycie ukrytego pola i umieszczenie na nim znacznika czasu, a następnie porównanie go ze znacznikiem czasu na serwerze za pomocą PHP.
Jeśli było to szybsze niż 15 sekund (zależy od tego, jak duże lub małe są twoje formularze), to był to bot.
Mam nadzieję, że to pomoże
źródło
$.post
wyślij wszystko do zewnętrznego pliku php. 3) w zewnętrznym php ponownie pobierz czas serwera i porównaj z czasem sesji?Bardzo skutecznym sposobem wirtualnego wyeliminowania spamu jest utworzenie pola tekstowego zawierającego tekst, na przykład „Usuń ten tekst, aby przesłać formularz!” i ten tekst musi zostać usunięty przed wysłaniem formularza.
Po sprawdzeniu poprawności formularza, jeśli pole tekstowe zawiera tekst oryginalny lub dowolny inny tekst w tej sprawie, nie przesyłaj formularza. Boty mogą czytać nazwy formularzy i automatycznie wypełniać pola Imię i Adres e-mail, ale nie wiedzą, czy muszą faktycznie usunąć tekst z określonego pola, aby przesłać.
Wdrożyłem tę metodę na naszej stronie firmowej i całkowicie wyeliminowałem spam, który otrzymywaliśmy codziennie. To naprawdę działa!
źródło
Co powiesz na utworzenie pola tekstowego w tym samym kolorze co tło, które musi pozostać puste. Pozwoli to obejść problem wyświetlania odczytu przez bota: brak
źródło
http://recaptcha.net/reCAPTCHA to bezpłatna usługa antybotów, która pomaga w digitalizacji książek
Został przejęty przez Google (w 2009 r.):
Zobacz także
źródło
Wiele z tych robotów spamujących to po prostu skrypty po stronie serwera, które grasują w sieci. Możesz walczyć z wieloma z nich, używając javascript do manipulowania żądaniem formularza przed jego wysłaniem (tj. Ustawiając dodatkowe pole na podstawie jakiejś zmiennej klienta). Nie jest to pełne rozwiązanie i może prowadzić do wielu problemów (np. Użytkowników bez javascript, na urządzeniach mobilnych itp.), Ale może być częścią planu ataku.
Oto trywialny przykład ...
Gdzieś w twoim skrypcie php ...
Ponadto captcha są świetne i naprawdę stanowią najlepszą ochronę przed spamem.
źródło
Dziwię się, że nikt jeszcze nie wspomniał o tej metodzie:
Plusy:
Cons:
Na przykład ta metoda jest używana przez wtyczkę WordPress Pliki cookie do komentarzy .
źródło
Wraz z pojawieniem się przeglądarek bezgłowych (takich jak phantomjs), które mogą naśladować wszystko, nie można przypuszczać, że:
Jeśli to kiedyś było prawdą, to już nie jest.
Jeśli nie chcesz mieć rozwiązania przyjaznego dla użytkownika, po prostu daj im piękny przycisk przesyłania „Jestem spamerem” :
Oczywiście możesz bawić się dwoma
input[type=image]
przyciskami obrazów , zmieniając kolejność po każdym załadowaniu, alternatywne teksty, zawartość obrazów (i ich rozmiar) lubname
przyciski; co będzie wymagało trochę pracy serwera.Ze względu na dostępność musisz podać poprawną alternatywę tekstową, ale myślę, że długie zdanie jest lepsze dla użytkowników czytników ekranu niż bycie uważanym za bota.
Dodatkowa uwaga: te przykłady pokazują, że zrozumienie angielskiego (lub dowolnego innego) i dokonanie prostego wyboru jest trudniejsze dla spambota niż: czekanie 10 sekund, obsługa CSS lub JavaScript, wiedza, że pole jest ukryte, emulowanie ruchu myszy lub emulowanie pisania na klawiaturze, ...
źródło
Bardzo prostym sposobem jest podanie niektórych pól, takich jak
<textarea style="display:none;" name="input"></textarea>
i odrzucenie wszystkich odpowiedzi, które to wypełniały.Innym podejściem jest wygenerowanie całego formularza (lub tylko nazw pól) przy użyciu JavaScript; kilka botów może go uruchomić.
Zresztą niewiele zrobisz przeciwko żyjącym „botom” z Tajwanu czy Indii, które zarabiają na życie w ten sposób 0,03 dolara za jeden opublikowany link.
źródło
Mam proste podejście do zatrzymywania spamerów, które jest w 100% skuteczne, przynajmniej z mojego doświadczenia, i unika stosowania reCAPTCHA i podobnych podejść. Kiedy wdrożyłem to podejście, z prawie 100 spamów dziennie na formularzach html moich witryn spadłem do zera w ciągu ostatnich 5 lat.
Działa wykorzystując możliwości e-mailowe ALIAS większości skryptów obsługujących formularze html (ja korzystam z FormMail.pl), wraz z graficznym „kodem” zgłoszenia, który można łatwo utworzyć w najprostszych programach graficznych. Jedna z takich grafik zawiera kod M19P17nH i podpowiedź „Proszę wpisać kod z lewej strony”.
W tym konkretnym przykładzie użyto losowej sekwencji liter i cyfr, ale staram się używać innych niż angielska wersji słów znanych moim gościom (np. „Pnofrtay”). Zwróć uwagę, że monit o pole formularza jest wbudowany w grafikę, a nie pojawia się w formularzu. Zatem dla robota to pole formularza nie daje żadnej wskazówki co do jego przeznaczenia.
Jedyną prawdziwą sztuczką jest upewnienie się, że html twojego formularza przypisuje ten kod do zmiennej „adresat”. Następnie w programie pocztowym upewnij się, że każdy taki kod, którego używasz, jest ustawiony jako alias e-mail, który wskazuje na dowolne adresy e-mail, których chcesz używać. Ponieważ w formularzu nie ma żadnego znaku zachęty do odczytania przez robota ani adresów e-mail, nie ma pojęcia, co wpisać w puste pole formularza. Jeśli nie umieści nic w polu formularza lub cokolwiek poza akceptowalnymi kodami, przesłanie formularza kończy się niepowodzeniem z błędem „zły odbiorca”. Możesz użyć innej grafiki na różnych formach, chociaż z mojego doświadczenia nie jest to konieczne.
Oczywiście człowiek może rozwiązać ten problem w mgnieniu oka, bez wszystkich problemów związanych z reCAPTCHA i podobnymi, bardziej eleganckimi schematami. Jeśli ludzki spamer zareaguje na błąd odbiorcy i zaprogramuje kod obrazu w robocie, możesz go łatwo zmienić, gdy zdasz sobie sprawę, że robot został zaprogramowany, aby zareagować. W ciągu pięciu lat korzystania z tego podejścia nigdy nie otrzymałem spamu z żadnego z formularzy, w których go używam, ani nigdy nie otrzymałem skargi od żadnego ludzkiego użytkownika formularzy. Jestem pewien, że można to przebić dzięki możliwościom OCR w robocie, ale nigdy nie zdarzyło mi się to na żadnej z moich witryn, które używają formularzy html. Użyłem również „pułapek spamowych” (ukrytego kodu HTML „come here”, który wskazuje na moje zasady antyspamowe) z dobrym skutkiem, ale były one skuteczne tylko w około 90%.
źródło
Myślę tutaj o wielu rzeczach:
źródło
Inną opcją zamiast losowych liter i cyfr, jak to robi wiele witryn internetowych, jest zrobienie losowych zdjęć rozpoznawalnych obiektów. Następnie poproś użytkownika o wpisanie koloru przedmiotu na obrazku lub samego obiektu.
Podsumowując, każde rozwiązanie będzie miało swoje wady i zalety. Będziesz musiał znaleźć szczęśliwą medianę między zbyt trudnym dla użytkowników mechanizmem antyspamowym a liczbą robotów spamujących, które mogą się przedostać.
źródło
Roboty nie mogą wykonywać JavaScript, więc robisz coś takiego, jak wstrzyknięcie jakiegoś ukrytego elementu do strony za pomocą JavaScript, a następnie wykrycie jego obecności przed przesłaniem formularza, ale uważaj, ponieważ niektórzy z twoich użytkowników będą również mieli wyłączony JavaScript
W przeciwnym razie myślę, że będziesz zmuszony skorzystać z formularza klienta potwierdzającego „człowieczeństwo”
źródło
Najlepszym rozwiązaniem, jakie znalazłem, aby uniknąć spamowania przez boty, jest użycie bardzo banalnego pytania lub pola w formularzu.
Spróbuj dodać takie pole:
Te sztuczki wymagają od użytkownika zrozumienia, co należy wprowadzić w formularzu, co znacznie utrudnia bycie celem masowego wypełniania formularzy przez boty.
EDYTOWAĆ
Tyłem tej metody, jak powiedziałeś w swoim pytaniu, jest dodatkowy krok dla użytkownika w celu sprawdzenia poprawności jej formularza. Ale moim zdaniem jest to znacznie prostsze niż captcha, a narzut podczas wypełniania formularza nie przekracza 5 sekund, co wydaje się akceptowalne z punktu widzenia użytkownika.
źródło
W witrynie JQuery znajduje się poradnik na ten temat. Chociaż jest to JQuery, pomysł jest niezależny od frameworka.
Jeśli JavaScript nie jest dostępny, być może trzeba będzie wrócić do podejścia typu CAPTCHA.
źródło
Najłatwiejszym sposobem, w jaki to zrobiłem, jest umieszczenie pola z wartością i poproszenie użytkownika o usunięcie tekstu z tego pola. ponieważ boty tylko je zapełniają. jeśli pole nie jest puste, oznacza to, że użytkownik nie jest człowiekiem i nie zostanie wysłane. to ten sam cel co kod captcha.
źródło
To tylko pomysł, użyłem go w mojej aplikacji i działa dobrze
możesz utworzyć plik cookie przy ruchu myszy za pomocą javascript lub jquery i po stronie serwera sprawdzić, czy plik cookie istnieje, ponieważ tylko ludzie mają mysz, plik cookie może być utworzony tylko przez nich plik cookie może być znacznikiem czasu lub tokenem, który można zweryfikować
źródło
Użyj 1) formularza z tokenami 2) Sprawdź formularz, aby utworzyć opóźnienie z adresem IP 3) Zablokuj IP (opcjonalnie)
źródło
Z mojego doświadczenia wynika, że jeśli formularz jest tylko formularzem „kontaktowym”, nie potrzebujesz specjalnych środków. Spam jest porządnie filtrowany przez usługi poczty internetowej (możesz śledzić żądania formularzy internetowych za pomocą skryptów serwera, aby zobaczyć, co skutecznie dociera do Twojej poczty e-mail, oczywiście zakładam, że masz dobrą usługę poczty internetowej: D)
Nie sądzę, żeby to było dobre. Rzeczywiście to, co chcę osiągnąć to otrzymywanie e-maili od użytkowników, którzy wykonują określoną czynność, ponieważ są to użytkownicy, którymi jestem zainteresowany (na przykład użytkownicy, którzy przeglądali stronę "CV" i korzystali z odpowiedniego kontaktu Formularz). Więc jeśli użytkownik robi coś, co chcę, zaczynam śledzić jego sesję i ustawiam plik cookie (zawsze ustawiam plik cookie sesji, ale kiedy nie rozpoczynam sesji, jest to tylko fałszywy plik cookie, który ma uwierzyć, że użytkownik ma sesję). Jeśli użytkownik zrobi coś niepożądanego, nie kłopoczę się utrzymywaniem dla niego sesji, więc nie przeciążam itp.
Byłoby również dla mnie miłe, gdyby usługi reklamowe oferowały jakiś rodzaj interfejsu API (być może już istniejącego), aby sprawdzić, czy użytkownik „spojrzał na reklamę”, jest prawdopodobne, że użytkownicy oglądający reklamy są prawdziwymi użytkownikami, ale jeśli tak nie jest naprawdę dobrze, przynajmniej i tak masz 1 wyświetlenie, więc nic straconego. (zaufaj mi, sterowanie reklamami jest bardziej wyrafinowane niż wszystko, co możesz zrobić samodzielnie)
źródło
Właściwie pułapka z wyświetlaczem: żadna nie działa jak urok. Pomaga przenieść deklarację CSS do pliku zawierającego dowolne globalne arkusze stylów, co zmusiłoby roboty spamujące do ich załadowania (bezpośrednia deklaracja stylu = "display: none;" mogłaby zostać zinterpretowana przez bota spamującego, podobnie jak deklaracja stylu lokalnego w samym dokumencie).
To w połączeniu z innymi środkami zaradczymi powinno sprawić, że jakiekolwiek roboty spamujące będą mogły wyładować swoje śmieci (mam księgę gości zabezpieczoną różnymi środkami i jak dotąd dali się złapać w moje główne pułapki - jednak jeśli jakiś bot je ominie, tam czy inni są gotowi do uruchomienia).
To, czego używam, to kombinacja fałszywych pól formularzy (opisanych również jako nieprawidłowe pola w przypadku, gdy używana jest przeglądarka, która nie obsługuje CSS w ogóle lub nie wyświetla: żadnych w szczególności), kontroli poprawności (tj. Jest formatem danych wejściowych prawidłowe?), znaczniki czasu (zarówno zbyt szybkie, jak i zbyt wolne zgłoszenia), MySQL (do implementacji czarnych list opartych na adresach e-mail i IP oraz filtrach powodziowych), listy DNSBL (np. SBL + XBL ze Spamhaus), analiza tekstu ( np. słowa, które silnie wskazują na spam) i e-maile weryfikacyjne (w celu ustalenia, czy podany adres e-mail jest prawidłowy).
Jedna uwaga na temat maili weryfikacyjnych: Ten krok jest całkowicie opcjonalny, ale gdy zdecydujesz się go wdrożyć, proces ten musi być jak najłatwiejszy w użyciu (to znaczy powinien sprowadzać się do kliknięcia linku zawartego w wiadomości e-mail ) i spowodować umieszczenie danego adresu e-mail na białej liście na określony czas, aby uniknąć późniejszej weryfikacji w przypadku, gdy użytkownik chce dodać dodatkowe posty.
źródło
Używam metody, w której jest ukryte pole tekstowe. Ponieważ boty analizują witrynę, prawdopodobnie ją zapełniają. Następnie sprawdzam, czy jest pusty, jeśli nie jest to strona wraca.
Dodaj weryfikację e-mail. Użytkownik otrzymuje wiadomość e-mail i musi kliknąć łącze. W przeciwnym razie po pewnym czasie odrzuć post.
źródło
Dodałem kontrolę czasu do moich formularzy. Formularze nie zostaną przesłane, jeśli zostaną wypełnione w mniej niż 3 sekundy, a to działało świetnie, szczególnie w przypadku długich formularzy. Oto funkcja sprawdzania formularza, którą wywołuję po kliknięciu przycisku przesyłania
źródło
Przy coraz bardziej wyrafinowanych robotach spamujących i technikach, takich jak zautomatyzowane przeglądarki, trudniej będzie określić źródło spamu. Jednak spam wysyłany przez oprogramowanie, człowieka lub jedno i drugie jest spamem ze względu na zawartość. Myślę, że najlepszym rozwiązaniem jest przepuszczanie publikowanych treści przez antyspamowe API, takie jak Cleantalk czy Akismet. Jest stosunkowo tani i skuteczny oraz nie przeszkadza użytkownikowi. Możesz sprawdzić czas przesyłania formularzy i inne tradycyjne kontrole pod kątem mniej wyrafinowanych botów, zanim przejdziesz do interfejsu API.
źródło
Możesz spróbować oszukać spam-roboty, dodając atrybut prawidłowego działania po sprawdzeniu poprawności Javascript. Jeśli robot zablokuje JavaScript, nigdy nie będzie mógł poprawnie przesłać formularza.
HTML
JAVASCRIPT
Następnie dodaję „callback” po .attr (), aby zapobiec błędom.
źródło
Tylko moje pięć centów. Jeśli celem tego jest zatrzymanie 99% robotów, co brzmi całkiem nieźle, i jeśli 99% robotów nie może uruchomić skryptu Java, najlepszym rozwiązaniem, które pokonuje wszystko, jest po prostu nieużywanie formularza, który ma akcję przesyłania adres URL posta.
Jeśli formularz jest sterowany za pomocą skryptu java, a skrypt java zbiera dane formularza, a następnie wysyła je za pośrednictwem żądania HTTP, żaden robot nie może przesłać formularza. Ponieważ przycisk przesyłania używałby skryptu Java do uruchomienia kodu, który wysyła formularz.
źródło