Jak zapobiec automatycznemu wypełnianiu formularza przez roboty?

Próbuję wymyślić wystarczająco dobry mechanizm antyspamowy, aby zapobiec automatycznie generowanym wejściom. Czytałem, że takie techniki jak captcha, 1+1=? rzeczy działają dobrze, ale również stanowią dodatkowy krok utrudniający bezpłatne szybkie korzystanie z aplikacji(nie szukam czegoś takiego proszę).

Próbowałem ustawić niektóre ukryte pola we wszystkich moich formularzach, z display: none; Jestem jednak pewien, że skrypt można skonfigurować tak, aby śledził ten identyfikator pola formularza i po prostu nie wypełniał to.

Czy wdrażasz / znasz dobrą metodę anty-automatycznego wypełniania formularzy-robotów? Czy jest coś, co można zrobić bezproblemowo z przetwarzaniem HTML i / lub po stronie serwera i być (prawie) kuloodpornym? (bez JS jak można go po prostu wyłączyć).

Staram się nie polegać na sesjach w tym zakresie (tj. liczenie, ile razy przycisk został kliknięty, aby zapobiec przeciążeniom).

Author: Gal, 2010-03-05

27 answers

Łatwy do wdrożenia, ale nie niezawodny (szczególnie w przypadku" specyficznych " ataków) sposób rozwiązywania anty-spamu to śledzenie czasu między przesłaniem formularza a załadowaniem strony.

Boty żądają strony, analizują stronę i przesyłają formularz. To jest szybkie.

Ludzie wpisują adres URL, ładują stronę, czekają, aż strona zostanie w pełni załadowana, przewijają w dół, czytają treść, decydują się skomentować / wypełnić formularz, wymagają czasu na wypełnienie formularza i przesłać.

Różnica w czasie może być subtelna; a jak śledzić ten czas bez cookies wymaga jakiś sposób bazy danych po stronie serwera. Może to mieć wpływ na wydajność.
Musisz również dostosować czas progowy.

 69
Author: Pindatjuh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 15:10:22

Uważam, że proste pole miodu działa dobrze. Większość botów wypełnia każde pole formularza, mając nadzieję, że obejdzie wymagane Weryfikatory pól.

Http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Jeśli utworzysz pole tekstowe, ukryj je w javascript, a następnie sprawdź, czy wartość jest pusta na serwerze, to usuwa 99% robotów i nie powoduje 99% Twoich użytkowników żadnych frustracji w ogóle. Pozostałe 1% które mają wyłączoną obsługę javascript nadal będą widzieć pole tekstowe, ale możesz dodać wiadomość w stylu "Leave this field blank" w takich przypadkach (jeśli ci na nich zależy w ogóle).

(ponadto, zauważając, że jeśli robisz style = "display: none" na polu, to jest zbyt łatwe dla robota, aby po prostu to zobaczyć i odrzucić pole, dlatego wolę podejście javascript).

 67
Author: Ben Scheirman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 17:26:54

co jeśli - Bot w ogóle nie znajdzie form?

3 przykłady:

1. Wstaw swój formularz za pomocą AJAX

Jeśli nie masz nic przeciwko, aby użytkownicy mieli wyłączony JS i nie mogli zobaczyć / przesłać formularza... Zawsze możesz powiadomić ich za pomocą <noscript><p class="error">ERROR: The form could not be loaded. Please, re-enable JavaScript in your browser to fully enjoy our services.</p></noscript>. Niż,

  1. Utwórz form.html i umieść form wewnątrz <div id="formContainer"> elementu.
  2. niż wewnątrz strony, gdzie trzeba wywołać ten formularz użyć pustego <div id="dynamicForm"></div> i to jQuery:

$("#dynamicForm").load("form.html #formContainer");

2. Zbuduj swój formularz całkowicie za pomocą JS

// THE FORM
var $form = $("<form/>", {
  appendTo : $("#formContainer"),
  class    : "myForm",
  submit   : AJAXSubmitForm
});

// EMAIL INPUT
$("<input/>",{
  name        : "Email", // Needed for serialization
  placeholder : "Your Email",
  appendTo    : $form,
  on          : {        // Yes, the jQuery's on() Method 
    input : function() {
      console.log( this.value );
    }
  }
});

// MESSAGE TEXTAREA
$("<textarea/>",{
  name        : "Message", // Needed for serialization
  placeholder : "Your message",
  appendTo    : $form
});

// SUBMIT BUTTON
$("<input/>",{
  type        : "submit",
  value       : "Send",
  name        : "submit",
  appendTo    : $form
});

function AJAXSubmitForm(event) {
  event.preventDefault(); // Prevent Default Form Submission
  // do AJAX instead:
  var serializedData = $(this).serialize();
  alert( serializedData );
  $.ajax({
    url: '/mail.php',
    type: "POST",
    data: serializedData,
    success: function (data) {
      // log the data sent back from PHP
      console.log( data );
    }
  });
}
.myForm input,
.myForm textarea{
  font: 14px/1 sans-serif;
  box-sizing: border-box;
  display:block;
  width:100%;
  padding: 8px;
  margin-bottom:12px;
}
.myForm textarea{
  resize: vertical;
  min-height: 120px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="formContainer"></div>

3. Bot-bait input

Boty jak (naprawdę. like) saucy input elements like:

<input
  type="text"
  name="email"
  id="email"
  placeholder="Your email"
  autocomplete="nope"
  tabindex="-1" />

Będą szczęśliwi wprowadzając jakąś wartość tak jak robią [email protected]

Niż (po użyciu powyższego HTML), za pomocą CSS zrobić jak:

input[name=email]{ /* bait input */
    /*
         don't use display:none or visibility:hidden
         cause that will not fool the bot
    */
    position:absolute;
    left:-2000px;
}

Teraz, gdy twoje wejście nie jest widoczne dla użytkownika, oczekuj w PHP że Twój $_POST["email"] powinno być puste (bez żadnej wartości)! W przeciwnym razie nie wysyłaj formularza.

Teraz wystarczy utworzyć kolejne wejście Jak <input name="sender" type="text" placeholder="Your email"> Po (!) wpis "bot-bait" dla rzeczywistego adresu e-mail użytkownika.)

podziękowania:

Programista.Mozilla-wyłączanie autocompletion form
StackOverflow-Ignoruj Tabindex

 16
Author: Roko C. Buljan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 08:31:29

Zrobiłem to, aby użyć ukrytego pola i umieścić na nim znacznik czasu, a następnie porównać go do znacznika czasu na serwerze za pomocą PHP.

Jeśli był szybszy niż 15 sekund (zależy jak duże lub małe są Twoje formularze) to był bot.

Hope this help

 15
Author: adnhack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 05:56:37

Bardzo skutecznym sposobem na praktycznie wyeliminowanie spamu jest posiadanie pola tekstowego, w którym znajduje się tekst, np. "Usuń ten tekst w celu przesłania formularza!"i ten tekst musi zostać usunięty, aby przesłać formularz.

Po zatwierdzeniu formularza, jeśli pole tekstowe zawiera tekst oryginalny lub dowolny losowy tekst, nie przesyłaj formularza. Boty mogą odczytywać nazwy formularzy i automatycznie wypełniać pola nazwy i adresu e-mail, ale nie wiedzą, czy muszą faktycznie usunąć tekst z określonego pole w celu złożenia.

Wdrożyłam tę metodę na naszej firmowej stronie internetowej i całkowicie wyeliminowała spam, który dostajemy na co dzień. To naprawdę działa!

 13
Author: HawleyTronics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 18:22:42

Jak o utworzeniu pola tekstowego pola wprowadzania tego samego koloru co tło, które musi pozostać puste. Problem z wyświetlaniem odczytu bota: none

 10
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-15 23:19:50

http://recaptcha.net/

ReCAPTCHA jest DARMOWĄ usługą antybotową, która pomaga w digitalizacji książek [5]}

Został zakupiony przez Google (w 2009 roku):

Zobacz też

 8
Author: Anantha Kumaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-13 11:00:28

Wiele z tych spam-botów to tylko skrypty po stronie serwera, które krążą po sieci. Możesz zwalczać wiele z nich, używając javascript do manipulowania żądaniem formularza przed jego wysłaniem (np. 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żytkownicy bez javascript, na urządzeniach mobilnych itp.), ale może być częścią twojego planu ataku.

Oto trywialny przykład...

<script>
function checkForm()
{
    // When a user submits the form, the secretField's value is changed
    $('input[name=secretField]').val('goodValueEqualsGoodClient');

    return true;
}
</script>

<form id="cheese" onsubmit="checkForm">
<input type="text" name="burger">

<!-- Check that this value isn't the default value in your php script -->
<input type="hidden" name="secretField" value="badValueEqualsBadClient">

<input type="submit">
</form>

Gdzieś w Twoim php scenariusz...

<?php

if ($_REQUEST['secretField'] != 'goodValueEqualsGoodClient')
{
    die('you are a bad client, go away pls.');
}

?>

Ponadto, captchas są świetne i naprawdę najlepszą obroną przed spamem.

 7
Author: John Himmelman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 14:57:26

Dziwię się, że nikt jeszcze nie wspomniał o tej metodzie:

  • na swojej stronie, Dołącz mały, ukryty obraz.
  • Umieść plik cookie podczas serwowania tego obrazu.
  • podczas przetwarzania przesłania formularza, sprawdź, czy plik cookie.


plusy:

  • wygodny dla użytkownika i programisty
  • wydaje się być wiarygodne
  • no JavaScript

Wady:

  • dodaje jedno żądanie HTTP
  • wymaga włączenia plików cookie na client


na przykład ta metoda jest używana przez wtyczkę WordPress Pliki cookie do komentarzy.

 4
Author: Gras Double,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-16 00:41:17

Wraz z pojawieniem się bezgłowych przeglądarek (jak phantomjs), które mogą emulować wszystko, nie można założyć, że:

  • spam boty nie używają javascript,
  • możesz śledzić zdarzenia myszy, aby wykryć bota,
  • nie zobaczą, że pole jest wizualnie Ukryte,
  • nie będą czekać na dany czas przed złożeniem.

Jeśli to była prawda, to już nie.

If you wan ' t an user friendly rozwiązanie, po prostu daj im piękny "jestem spamerem" submit button:

 <input type="submit" name="ignore" value="I am a spammer!" />
 <input type="image" name="accept" value="submit.png" alt="I am not a spammer" />

Oczywiście możesz grać za pomocą dwóch przycisków image input[type=image], zmieniając kolejność po każdym załadowaniu, alternatywy tekstowe, zawartość obrazów (i ich rozmiar) lub name przycisków; które będą wymagały trochę pracy na serwerze.

 <input type="image" name="random125454548" value="random125454548.png"
      alt="I perfectly understand that clicking on this link will send the
      e-mail to the expected person" />
 <input type="image" name="random125452548" value="random125452548.png"
      alt="I really want to cancel the submission of this form" />

Ze względu na dostępność, musisz umieścić poprawną alternatywę tekstową, ale myślę, że długie zdanie jest lepsze dla użytkowników screenreaderów niż bycie uważanym za bota.

 3
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 15:38:25

Bardzo prostym sposobem jest podanie pól typu <textarea style="display:none;" name="input"></textarea> i odrzucenie wszystkich odpowiedzi, które zostały wypełnione.

Innym podejściem jest wygenerowanie całego formularza (lub tylko nazw pól) za pomocą Javascript; kilka botów może go uruchomić.

W każdym razie, nie zrobisz wiele przeciwko żywym "botom" z Tajwanu lub Indii, które płacą 0,03 $za jeden opublikowany link i zarabiają w ten sposób na życie.

 2
Author: SF.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 15:20:11

Mam proste podejście do powstrzymywania spamerów, które jest w 100% skuteczne, przynajmniej z mojego doświadczenia, i unika stosowania reCAPTCHA i podobnych podejść. Od blisko 100 spamów dziennie na formularzach html jednej z moich stron do zera przez ostatnie 5 lat po wdrożeniu tego podejścia.

Działa wykorzystując możliwości aliasów e-mail większości skryptów obsługujących formularze html (używam FormMail.pl), wraz z graficznym "kodem", który można łatwo stworzyć w najbardziej proste programy graficzne. Jedna z takich grafik zawiera kod M19P17nH i monit "Proszę wprowadzić kod po lewej stronie".

Ten konkretny przykład wykorzystuje losową sekwencję liter i cyfr, ale zwykle używam nie-angielskich wersji słów znanych moim odwiedzającym (np. "pnofrtay"). Zwróć uwagę, że znak zachęty dla pola formularza jest wbudowany w grafikę, a nie pojawia się w formularzu. Tak więc, dla robota, to pole formularza nie daje żadnych wskazówek co do jego przeznaczenia.

Jedyna prawdziwa sztuczka aby upewnić się, że twój formularz HTML przypisze ten kod do zmiennej "odbiorca". 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 dowolny adres e-mail, którego chcesz użyć. Ponieważ w formularzu nie ma żadnego monitu do odczytu dla robota i nie ma adresów e-mail, nie ma pojęcia, co umieścić w pustym polu formularza. Jeśli nie umieścisz nic w polu formularza ani niczego poza akceptowalnymi kodami, złożenie formularza nie powiedzie się z " złym odbiorca " błąd. Możesz użyć innej grafiki na różnych formach, chociaż z mojego doświadczenia nie jest to naprawdę 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ł ciężko zakodowany, aby odpowiedzieć. W ciągu pięciu lat używania takie podejście, nigdy nie miałem spamu z żadnego z formularzy, na których go używam, ani nigdy nie miałem skargi od jakiegokolwiek ludzkiego użytkownika formularzy. Jestem pewien, że można to pokonać za pomocą funkcji OCR w robocie, ale nigdy nie zdarzyło mi się to na żadnej z moich stron, które używają formularzy html. Użyłem również" spam traps "(ukryty kod html" come hither", który wskazuje na moje zasady Antyspamowe) z dobrym skutkiem, ale były one skuteczne tylko około 90%.

 2
Author: user2643367,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-01 19:02:31

Myślę tu o wielu rzeczach:

  1. używanie JS (chociaż nie chcesz go) do śledzenia ruchu myszy, naciśnięcia klawisza, kliknięcia myszką
  2. uzyskanie adresu referencyjnego (który w tym przypadku powinien być adresem z tej samej domeny) ... zwykły użytkownik musi przejść przez stronę internetową przed dotarciem do formularza kontaktowego: PHP: jak uzyskać adres URL odsyłającego?
  3. użycie zmiennej $_SESSION do pozyskania IP i sprawdzenia formularza submit względem tej listy IP
  4. wypełnij jedno pole tekstowe z jakimś atrapowym tekstem, który możesz sprawdzić po stronie serwera, czy został nadpisany
  5. Sprawdź wersję przeglądarki: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ... Oczywiste jest, że bot nie będzie używał przeglądarki, a tylko skryptu.
  6. Użyj AJAX, aby wysłać pola jeden po drugim i sprawdzić różnicę w czasie między przesłanymi
  7. Użyj fałszywej strony przed / po formularzu, aby wysłać kolejne wejście
 1
Author: valicu2000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:51

Inną opcją zamiast robić losowe litery i cyfry, jak wiele stron internetowych, jest robienie losowych zdjęć rozpoznawalnych obiektów. Następnie poproś użytkownika o wpisanie albo tego, jakiego koloru jest coś na zdjęciu, albo jaki jest sam obiekt.

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 przekazaniem mechanizmu antyspamowego a liczbą botów spamowych, które mogą się przedostać.

 0
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 14:53:54

Najlepszym rozwiązaniem, jakie znalazłem, aby uniknąć spamowania przez boty, jest użycie bardzo trywialnego pytania lub pola w formularzu.

Spróbuj dodać takie pole:

  • skopiuj "hello" w bok
  • 1+1 = ?
  • skopiuj nazwę strony w polu

Te sztuczki wymagają od użytkownika zrozumienia, co należy wprowadzić w formularzu, co znacznie utrudnia bycie celem masowego wypełniania formularzy botów.

EDIT

The backside of ta metoda, jak podałeś w swoim pytaniu, jest dodatkowym krokiem dla użytkownika, aby zweryfikować jego formę. Ale, moim zdaniem, jest to znacznie prostsze niż captcha i narzut podczas wypełniania formularza jest nie więcej niż 5 sekund, co wydaje się akceptowalne z punktu widzenia użytkownika.

 0
Author: Thibault Falise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 15:16:23

Jest tutorial o tym na stronie JQuery. Chociaż to JQuery pomysł jest niezależny od frameworka.

Jeśli JavaScript nie jest dostępny, może być konieczne przejście do podejścia typu CAPTCHA.

 0
Author: Pool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 15:27:30

Łatwym sposobem, który znalazłem, jest umieszczenie pola z wartością i poproszenie użytkownika o usunięcie tekstu w tym polu. ponieważ boty tylko je wypełniają. jeśli pole nie jest puste, oznacza to, że użytkownik nie jest człowiekiem i nie zostanie opublikowany. to samo przeznaczenie kodu captcha.

 0
Author: matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-14 13:27:38

Its just a idea, id used that in my application and works well

Możesz utworzyć plik cookie przy ruchu myszy za pomocą javascript lub jquery, a po stronie serwera sprawdzić, czy plik cookie istnieje, ponieważ tylko ludzie mają mysz, plik cookie może być tworzony tylko przez nich plik cookie może być znacznikiem czasu lub tokenem, który można zweryfikować

 0
Author: h0mayun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-19 11:44:44

Użycie 1) Formularz z żetonami 2) Sprawdź formularz z adresem IP 3) Block IP (opcjonalnie)

 0
Author: Vivian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-11 12:32:30

Z mojego doświadczenia wynika, że jeśli formularz jest tylko formularzem "kontaktowym", nie potrzebujesz specjalnych środków. Spam jest przyzwoicie filtrowany przez usługi poczty internetowej (możesz śledzić żądania formularzy internetowych za pomocą skryptów serwerowych, aby zobaczyć, co skutecznie dociera do twojego e-maila, oczywiście zakładam, że masz dobrą usługę poczty internetowej :D)

Btw staram się nie polegać na sesjach do tego (jak, licząc jak wiele razy przycisk jest klikany, aby zapobiec przeciążeniom).

Myślę, że to nie jest dobre, rzeczywiście to, co chcę osiągnięcie to otrzymywanie e-maili od użytkowników, którzy wykonują określone działania, ponieważ są to użytkownicy, którymi jestem zainteresowany (na przykład użytkownicy, którzy spojrzeli na stronę "CV" i skorzystali z odpowiedniego formularza kontaktowego). Jeśli więc użytkownik zrobi coś, co chcę, zaczynam śledzić jego sesję i ustawiam plik cookie (zawsze ustawiam plik cookie sesji, ale gdy nie rozpoczynam sesji, jest to po prostu fałszywy plik cookie stworzony, aby uwierzyć, że użytkownik ma sesję). Jeśli użytkownik zrobi coś niechcianego, nie przejmuję się utrzymywaniem sesji dla niego, więc nie ma przeciążenia itd.

Również byłoby miło dla mnie, że usługi reklamowe oferują jakiś rodzaj api (może, że już istnieje), aby zobaczyć, czy użytkownik "spojrzał na reklamę", jest prawdopodobne, że użytkownicy patrząc na reklamy są prawdziwymi użytkownikami, ale jeśli nie są one prawdziwe dobrze przynajmniej dostajesz 1 widok i tak nic straty. (i uwierz mi, sterowanie reklamami jest bardziej wyrafinowane niż cokolwiek, co możesz zrobić sam)

 0
Author: GameDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-11 12:47:50

Właściwie pułapka z display: none działa jak urok. Pomaga to przenieść deklarację CSS do pliku zawierającego dowolne globalne arkusze stylów, co zmusiłoby boty spamujące do ich załadowania (bezpośrednia deklaracja style="display: none;" może być interpretowana przez spam-bota, podobnie jak lokalna deklaracja stylu wewnątrz samego dokumentu).

To w połączeniu z innymi środkami zaradczymi powinno sprawić, że wszelkie spamowe boty rozładują swoje śmieci (mam gościa książka zabezpieczona różnymi środkami i do tej pory wpadły w moje główne pułapki - jednak, jeśli każdy bot omija te, są inne gotowe do uruchomienia).

Używam kombinacji fałszywych pól formularza (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 display: none w szczególności), sprawdzanie poprawności (tzn. czy format wejścia jest prawidłowy?), time stamping (zarówno za szybkie jak i za wolne przesyłanie), MySQL (dla implementacja czarnych list w oparciu o adresy e-mail i IP oraz filtry powodziowe), DNSBL (np. SBL+XBL od Spamhaus), analiza tekstu (np. słowa, które są silnym wskaźnikiem spamu) i e-maile weryfikacyjne (w celu ustalenia, czy podany adres e-mail jest poprawny).

Jedna uwaga na e-maile weryfikacyjne: ten krok jest całkowicie opcjonalny, ale gdy zdecydujemy się go wdrożyć, proces ten musi być tak łatwy w użyciu, jak to tylko możliwe (czyli powinien sprowadzać się do kliknięcia linku zawarte w wiadomości e-mail) i spowodować, że dany adres e-mail zostanie umieszczony na białej liście przez pewien okres czasu, aby uniknąć kolejnych weryfikacji w przypadku, gdy użytkownik chce dodać dodatkowe posty.

 0
Author: Robidu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 17:14:49
  1. Używam metody, w której jest ukryty textbox. Ponieważ boty analizują stronę, prawdopodobnie ją wypełniają. Następnie sprawdzam, czy jest pusta, jeśli nie jest strona wraca z powrotem.

  2. Dodaj weryfikację e-mail. Użytkownik otrzymuje wiadomość e-mail i musi kliknąć link. W przeciwnym razie Odrzuć post za jakiś czas.

 0
Author: cookie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-20 19:44:28

Dodałem czek czasowy do moich formularzy. Formularze nie będą przesyłane, jeśli zostaną wypełnione w czasie krótszym niż 3 sekundy i to działało świetnie dla mnie, szczególnie w przypadku długich formularzy. Oto funkcja sprawdzania formularza, którą wywołuję na przycisku submit

function formCheck(){
var timeStart; 
var timediff;

$("input").bind('click keyup', function () {
    timeStart = new Date().getTime();          
}); 
 timediff= Math.round((new Date().getTime() - timeStart)/1000);

  if(timediff < 3) { 
    //throw a warning or don't submit the form 
  } 
  else submit(); // some submit function

}
 0
Author: Harika Y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-20 17:23:49

Możesz spróbować oszukać spam-roboty dodając poprawną akcję atribute po walidacji Javascript. więc jeśli robot blokuje javascript nigdy nie przesłać poprawnie formularz.

HTML

<form id="form01" action="false-action.php">
    //your inputs
    <button>SUBMIT</button>
</form>

JAVASCRIPT

$('#form01 button').click(function(){

   //your Validations and if everything is ok: 

    $('#form01').attr('action', 'correct-action.php').on("load",function(){
        document.getElementById('form01').submit()
    });
})

Dodaję "callback" po .attr() aby zapobiec błędom

 0
Author: Santi Nunez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 12:13:25

Z coraz bardziej wyrafinowanymi botami spamowymi i technikami, takimi jak zautomatyzowane przeglądarki, trudniej będzie określić źródło spamu. Ale czy wysłany przez oprogramowanie, człowieka, czy oba, spam jest spamem ze względu na jego zawartość. Myślę, że najlepszym rozwiązaniem jest uruchamianie opublikowanych treści za pośrednictwem anty-spamowego API, takiego jak Cleantalk lub Akismet. Jest stosunkowo tani i skuteczny i nie przeszkadza użytkownikowi. Możesz sprawdzić czasy składania formularzy i inne tradycyjne kontrole pod kątem mniej skomplikowanych boty przed uruchomieniem API.

 0
Author: nmit026,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 01:57:07

Roboty nie mogą wykonywać JavaScript, więc robisz coś takiego, jak wstrzykiwanie jakiegoś ukrytego elementu do strony za pomocą JavaScript, a następnie wykrywanie jego obecności przed przesłaniem formularza, ale uważaj, ponieważ niektórzy użytkownicy będą mieli wyłączoną obsługę JavaScript

W przeciwnym razie myślę, że będziesz zmuszony użyć formy dowodu klienta "człowieczeństwa"

 -1
Author: Nick Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 14:54:08

Tylko moje pięć centów. Jeśli celem tego jest zatrzymanie 99% robotów, co brzmi całkiem dobrze, a jeśli 99% robotów nie może uruchomić Java-script najlepszym rozwiązaniem, które przebije wszystko, jest po prostu nie używać formularza, który ma akcję submit z adresem URL post.

Jeśli formularz jest kontrolowany przez java-script, a java-script zbiera dane formularza, a następnie wysyła je poprzez żądanie HTTP, żaden robot nie może przesłać formularza. Ponieważ przycisk submit użyłby Java-script do uruchomienia kodu, który wysyła forma.

 -1
Author: MartinWebb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-14 12:00:12