Як запобігти автоматичному заповненню форми роботів?


105

Я намагаюся придумати достатньо хороший механізм проти спаму, щоб запобігти автоматично генерованому вводу. Я читав такі прийоми, як captcha, 1 + 1 =? речі працюють добре, але вони також представляють додатковий крок, що перешкоджає швидкому використанню програми (я не шукаю нічого подібного, будь ласка).

Я намагався встановити деякі приховані поля у всіх моїх формах, display: none; однак я впевнений, що сценарій може бути налаштований для відстеження цього ідентифікатора поля поля та просто не заповнює його.

Ви реалізуєте / знаєте хороший метод анти-автоматичного заповнення форми-роботи? Чи є щось, що можна легко виконати за допомогою обробки HTML І / АБО сервера і бути (майже) бронезахисним? (без JS як можна просто його відключити).

Я намагаюся не покладатися на сеанси для цього (тобто підраховувати, скільки разів натискають кнопку, щоб запобігти перевантаженням).


5
Дякуємо, що не хочете рішення captcha! IMO, форма спаму є проблемою для власників сайтів, і запобігання не є тягарем, який повинен нести користувач. Існує надто багато альтернативних способів, як ми можемо адресувати спам на кінці сайту, про що свідчать відповіді тут. Методи, що вимагають взаємодії з користувачем, повинні використовуватись лише ледачий або початківець.
Майк

Відповіді:


73

Простий у здійсненні, але не дурний спосіб (особливо щодо "конкретних" атак) для вирішення анти-спаму - це відстеження часу між надсиланням форми та завантаженням сторінки.

Боти запитують сторінку, розбирають її та подають форму. Це швидко.

Люди вводять URL-адресу, завантажують її, чекають, поки сторінка повністю завантажена, прокручуйте вниз, прочитайте вміст, вирішіть далі прокоментувати / заповнити форму, вимагайте часу для заповнення форми та подання.

Різниця в часі може бути тонкою; і як відстежувати цей час без файлів cookie потрібен певний спосіб на базі даних сервера. Це може мати вплив на продуктивність.
Також потрібно налаштувати пороговий час.


9
Слідкуйте, чи бажаєте ви дозволити кінцевим користувачам використовувати автоматичні заповнювачі форм, такі як addons.mozilla.org/en-US/firefox/addon/1882, які можуть дозволити дуже швидке надсилання. Так само як і кепта, що дратує кінцевого користувача, як правило, це не добре, а особливо, коли людині, що поспішає, не поспішати (дуже) швидко.
сніжинка

1
Хороший момент, але все залежить від контексту. Якщо форма є формою для входу, я повністю з вами згоден. Але навіщо відключати вхід з ботів? Якщо контекст - це поле для коментарів, як це у StackOverflow, я точно знаю: якщо ви використовуєте автоматичне заповнення у поле для коментарів, ви є спамером. Зауважте, що якщо ви використовуєте автоматичне заповнення для підписів, вам все одно потрібен час, щоб фактично набрати вміст.
Піндатюх

5
Зауважте, що ТАК робить щось подібне. Відредагуйте коментар швидко або занадто багато разів поспіль, і вам з’явиться "Ви людина?" сторінки.
Якоб Борг

2
Хакери не завжди вимагають форму. Іноді, ретельно складеної URL-адреси (за допомогою GET або POST) буде достатньо, щоб розмістити форму кілька разів з невеликими зусиллями.
крафтер

1
Реалізуйте це за допомогою captcha. Якщо форма була надіслана занадто швидко, пред'явіть капчу, щоб пропустити справжніх користувачів.
Yashovardhan99

75

Я фактично вважаю, що просте поле Honey Pot добре працює. Більшість ботів заповнюють кожне поле, яке вони бачать, сподіваючись обійти необхідні валідатори поля.

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

Якщо ви створюєте текстове поле, заховайте його в JavaScript, а потім переконайтеся, що на сервері значення порожнє , це знищує 99% роботів там і не спричиняє 99% ваших користувачів ніяких розладів. Решта 1%, у яких відключений JavaScript, все одно побачать текстове поле, але ви можете додати повідомлення типу "Залишити це поле порожнім" для таких випадків (якщо ви їх взагалі хвилюєте).

(Також зауваживши, що якщо ви робите style = "display: none" у полі, то роботові надто просто бачити це та відкинути поле, саме тому я віддаю перевагу підходу javascript).


1
Як ви думаєте, боти насправді проходять через файл css і вважають, що це відображення: немає; ? Я дійсно не використовую рішення на базі JS, оскільки його можна легко відключити.
Гал

1
Це, здається, є старим рішенням для веб-майстрів, включаючи багато невідповідних ключових слів з метою посилення їх веб-трансляції. Я думаю, що пошукові боти пошукових сканерів, такі google, можуть зрозуміти, що це показ: жоден. Чому б інші боти не могли цього зробити?
сніжинка

2
Я використовував цю методику зараз на двох сайтах, які забивались, і реєстрація ботів тепер дорівнює 0 на обох. Це не допоможе проти націлених атак, але більшість просто шукають подвиги чи спам.
nirvdrum

25
Невелике значення тут: щоб обійти проблему JS, просто скористайтеся CSS, щоб розташувати вхід медового списку над вершиною сторінки - таким чином буде нормально відключити js, і щоб обійти його, бот повинен буде мати змогу проаналізувати CSS абсолютне позиціонування та прийміть здоровий глузд щодо того, чи це медовий горщик чи ні. трохи більше
кулезахисних

3
@ alexy13 так, це простіше, але як зазначено у відповіді, боту також набагато простіше зрозуміти, що ви намагаєтеся зробити, просто перевірити наявність одного властивості CSS. Якщо ви використовуєте абсолютну стратегію позиціонування, бот повинен проаналізувати всі ваші правила позиціонування та правила більшості батьків елемента, щоб мати змогу зрозуміти, чи буде вхідний вид видимим чи ні, а потім з'ясувати, чи чи не діяти на цій інформації - що для всіх (бодай не всіх) ботів - це більше клопоту, ніж це варто.
totalNotLizards

22

Що робити, якщо Бот взагалі не знайде form?

3 приклади:

  1. Вставте форму за допомогою AJAX
  • Якщо ви все добре, якщо користувачі з вимкненим JS не мають можливості переглядати / надсилати форму, ви можете сповістити їх і дозволити їм активувати Javascript спочатку за допомогою оператора nocript:
<noscript>
  <p class="error">
    ERROR: The form could not be loaded. Please enable JavaScript in your browser to fully enjoy our services.
  </p>
</noscript>
  • Створіть form.htmlі розмістіть formвсередині <div id="formContainer">елемента.

  • Всередині сторінки, на якій потрібно зателефонувати в цю форму, використовуйте порожню <div id="dynamicForm"></div>та цю jQuery:$("#dynamicForm").load("form.html #formContainer");

  1. Формуйте форму повністю за допомогою 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>

  1. Введення бот-приманки
  • Боти, як ( дуже подобається) вхідні елементи вкладки, такі як:
<input 
  type="text"
  name="email"
  id="email"
  placeholder="Your email"
  autocomplete="nope"
  tabindex="-1"
They wll be happy to enter some value such as
`dsaZusil@kddGDHsj.com`
  • Після використання вищевказаного HTML ви також можете використовувати CSS, щоб не відображати вхід:
input[name=email]{ /* bait input */
  /* do not use display:none or visibility:hidden
     that will not fool the bot*/
  position:absolute;
  left:-2000px;
}
  • Тепер, коли ваш внесок не видно користувачеві, очікуйте, що в PHP він $_POST["email"] повинен бути порожнім (без будь-якого значення)! В іншому випадку не надсилайте форму.
  • І, нарешті, все , що вам потрібно зробити , це створити інший вхід , як <input name="sender" type="text" placeholder="Your email"> після (!) В «бот-приманки» вхід для фактичної адреси електронної пошти користувача.

Подяка:

Developer.Mozilla - Відключення форми автозаповнення
StackOverflow - Ігнорування Tabindex


7
Чи може законний веб-переглядач потенційно бачити поле введення приманки як поле електронної пошти і автоматично заповнювати його автоматично, коли користувач вирішить заповнити решту форми? Користувач не побачив би заповнене далеко поза екраном, і вони все одно будуть виглядати ботом.
wilbbe01

Я підозрюю, autocomplete=nopeщо за замовчуванням буде on;-) MDN: input # attr-autocomplete
обробити

@handle це не має значення, це введення приманки бота. Ви можете написати autocomplete="oh sunny day"для цього питання.
Роко С. Бульян

19

Що я зробив, це використовувати приховане поле і поставити на нього часову позначку, а потім порівняти її з часовою міткою на сервері за допомогою PHP.

Якщо це було швидше, ніж 15 секунд (залежить від того, наскільки великі чи малі у вас форми), це був бот.

Сподіваюся, що це допоможе


1
Хороша ідея, однак я б встановив обмеження приблизно на 3 - 5 секунд, щоб дозволити користувачам швидкої роботи / живлення. Я використовую той самий підхід, і встановивши ліміт моїх форм на 3 секунди, відфільтрувавши 99% ботів.
Кайла

@adnhack Ви маєте на увазі щось на кшталт: 1) на завантаження сторінки з php отримати час сервера та створити сеанс. 2) користувач або бот заповнює форму, натискає Надіслати, $.postнадсилаючи все до зовнішнього файлу PHP. 3) у зовнішньому php знову отримати час сервера та порівняти з часом сеансу?
Андріс

16

Дуже ефективним способом фактичного усунення спаму є наявність текстового поля, в якому є текст, наприклад "Видаліть цей текст, щоб надіслати форму!" і цей текст потрібно видалити, щоб надіслати форму.

Після перевірки форми, якщо текстове поле містить оригінальний текст або будь-який випадковий текст з цього питання, не надсилайте форму. Боти можуть читати імена форм і автоматично заповнювати поля Ім'я та Електронна пошта, але не знають, чи потрібно фактично видаляти текст з певного поля, щоб подати.

Я реалізував цей метод на нашому корпоративному веб-сайті, і він повністю ліквідував спам, який ми отримували щодня. Це справді працює!


Цікаво, чи знаєте ви, чи вона більш ефективна, ніж інші відповіді ... прихований текстове поле або відстеження часу, необхідного для заповнення форми?
Остін Генлі

4
Це також охопить тих користувачів, які не можуть виконувати вказівки, які можуть бути не бажаними.
wilbbe01

Мені подобається це! Поки бот не почне спробувати різні комбінації порожніх та заповнених полів ... найкращий спосіб тестування - це реалізувати це та сканувати за допомогою одного з них: sectoolmarket.com/…
nmit026

Ефективна, оскільки людина, яка керує ботом, не знаходить і не перетворює код.
Талха Аван

11

Як щодо створення поля для введення тексту того ж кольору, що і фон, який повинен залишатися порожнім. Це дозволить вирішити проблему дисплея читання бота: жодного


2
Додайте це як коментар, будь ласка, коли ви отримаєте більше репутації замість відповіді;)
Роб

3
Це представляє проблеми доступності. Індекс медоносів не буде прихований від користувачів із екранами зчитування.
Otterfan

5
Я незрячий користувач, і колись я знайшов таке поле форми, і надписом над ним написано: "Якщо ви можете це побачити, залиште це поле порожнім". Дуже ефективний ІМО.
Пархам Дустдар

8

http://recaptcha.net/

reCAPTCHA - безкоштовна послуга антиботів, яка допомагає оцифрувати книги

Він отримав Google (у 2009 році):

Також див


5
Як користувач, мені здається, що recaptcha важко часто зрозуміти. Деякі слова настільки важко читати, що вам доведеться спробувати 3 або 4 рази. Хоча це безумовно допоможе з проблемою роботів.
Брайан

Що сказав Брайан і: yro.slashdot.org/story/10/03/02/0135238/…
SF.

Я опинився на цій сторінці, оскільки CAPTCHA / reCAPTCHA наразі не зупиняє подання форми бота. Це через 5 років, і це нова методика, ніж коли була дана відповідь
JohnnyFaldo,

Я вражений, чому ця відповідь не має більшої кількості голосів. сподобався користувачеві чи ні, це чудове рішення. Тим більше, якщо він використовується лише для реєстраційної форми.
towi_parallelism

У ці дні recaptcha починається як звичайний прапорець, можливо, це не так боляче, як раніше? ...
rogerdpack

6

Багато з цих спам-ботів - це лише скрипти на стороні сервера, які розповсюджуються в Інтернеті. Ви можете боротися з багатьма з них, використовуючи javascript для маніпулювання запитом форми перед його надсиланням (тобто, встановивши додаткове поле на основі певної змінної клієнта). Це не повне рішення і може спричинити багато проблем (наприклад, користувачів без JavaScript, на мобільних пристроях тощо), але це може бути частиною вашого плану атаки.

Ось банальний приклад ...

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

Десь у вашому PHP-скрипті ...

<?php

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

?>

Також є чудові капчі, і справді найкраща захист від спаму.


Дякую, хоча JavaScript можна легко відключити в будь-якому браузері, тим самим знищивши мій "механізм анти-спаму", тому я шукаю щось більш глобальне.
Гал

Я можу помилятися, але хіба це не скаже кожному користувачеві з обмеженими можливостями JS: "Ви поганий клієнт, відійдіть, pls."
Гал

Гал, його тривіальний приклад, просто демонструє, як перевірити варіювання запиту, встановленого клієнтом js.
Джон Гіммельман

@John Himmelman Captchas є вирішуваною і не обов'язково найкращою захистом від спаму. Існують послуги з оплатою, як-от anti-captcha.com, які вирішують капчу форми за низьку плату.

Проблема такого підходу полягає в тому, що я бачив багато ботів, що використовують PhantomJS. Це дозволило б їм пройти.
Пархам Дустдар

4

Я здивований, що ніхто ще не згадав цей метод:

  • На своїй сторінці додайте невелике приховане зображення.
  • Під час подання цього зображення розмістіть файл cookie.
  • Обробляючи подання форми, перевірте наявність файлу cookie.


Плюси:

  • зручний для користувача та розробника
  • видається надійним
  • немає JavaScript

Мінуси:

  • додає один HTTP-запит
  • вимагає, щоб у клієнта було включено куки


Наприклад, цей метод використовується файлами cookie WordPress для коментарів .


Чи не зможуть боти, які використовують такі речі, як PhantomJS, легко обійти це?
Пархам Дустдар

1
Оскільки це повноцінний двигун браузера, який завантажує активи та інше, так, це повинно бути можливим. Тим не менш, я не впевнений, що його часто використовують для спам-боту, оскільки це, ймовірно, набагато повільніше, ніж сценарії CURL.
Гра "Двомісний"

будь-яка причина, що це було б краще, ніж маркер CSRF?
ксенотеррацид

1
маркер CSRF взагалі не зупинить бота. 1-й запит, Отримайте форму, що включає маркер. 2-й запит, розмістіть форму, включаючи маркер.
Gras Double

4

З появою безголових браузерів (як Phantomjs), які можуть наслідувати що завгодно, ви не можете припустити, що:

  • спам-боти не використовують javascript,
  • ви можете відстежувати події миші для виявлення бота,
  • вони не побачать, що поле візуально приховано,
  • вони не чекатимуть заданого часу перед надсиланням.

Якщо раніше це було правдою, це вже не відповідає дійсності.

Якщо ви не бажаєте зручного для користувача рішення, просто надайте їм гарну кнопку подання "Я спамер" :

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

Звичайно, ви можете грати з двома input[type=image]кнопками зображення , змінюючи порядок після кожного завантаження, текстові альтернативи, вміст зображень (та їх розмір) або nameкнопки; що вимагатиме певної роботи з сервером.

 <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" />

З міркувань доступності вам потрібно поставити правильну текстову альтернативу, але я вважаю, що довге речення краще для користувачів екранізаторів, ніж вважати їх ботом.

Додаткова примітка: ці приклади ілюструють, що розуміти англійську мову (чи будь-яку мову) та робити простий вибір важче для спамботу, ніж: чекати 10 секунд, обробляти CSS чи javascript, знаючи, що поле приховане, емуляція переміщення миші або емуляція введення клавіатури, ...


Мені здається, що сам факт, що вам належить помістити альтернативний текст, означає, що ваше рішення із зображенням так само сприйняте сценарії, як і інші альтернативи. А для кнопки "Я не спамер": чи не може це бути і сценарієм?
Хокі

@Hawkeye Моєю відповіддю було те, що безголовий браузер може наслідувати що завгодно : javascript, затримки, переміщення миші, приховані поля, ... Термін "красивий" перед моїми прикладами був свого роду "саркастичним". Але ці приклади ілюструють, що розуміння англійської мови та необхідність зробити простий вибір складніше для спама, ніж: очікування 10 секунд, обробка CSS чи javascript, знаючи, що поле приховане, емуляція переміщення миші або емуляція набору клавіатури, ...
Адам

Зараз я бачу вашу думку. Можливо, до своєї відповіді додайте останнє твердження "Але ці приклади ілюструють ..." тощо. Тому що це допомогло мені зрозуміти, що ти маєш на увазі. Спочатку здавалося, що це суперечливий аргумент, що "ми не можемо припустити, що боти не можуть ...", але потім перераховують речі, які ми досі не можемо вважати, що боти не можуть робити. Але суть вашої точки зору полягає в тому, що ваш приклад (маючи зробити вибір на основі кнопки подання) важче - що (тепер я розумію) - це блискуча відповідь. +1
Хокі

3

Дуже простий спосіб - надати деякі поля, як-от <textarea style="display:none;" name="input"></textarea>і відкинути всі відповіді, які були заповнені.

Інший підхід полягає в генерації всієї форми (або лише імен полів) за допомогою Javascript; кілька ботів можуть це запустити.

У будь-якому випадку, ви не зробите багато проти живих "ботів" з Тайваню чи Індії, яким платять 0,03 долара за одне розміщене посилання та заробляють на життя таким чином.


2
Я знаю, що цій відповіді майже 7 років, але я відчуваю, що це варто коментувати. Багато ботів можуть бути запрограмовані ігнорувати поля зі стилем = "display: none", щоб уникнути цього типу захисту.
Кенні Джонсон

Існує десятки методів затемнення входів, використовуючи Javascript, відображення манекенових елементів поверх них, переміщення їх із видимого простору, стилізацію їх до ідеального поєднання з фоновими або макетними прикрасами тощо. hashed => original на сервері сеансу сеансу) допоможе не використовувати імена як підказки та вручну відобразити, які вхідні дані є дійсними. Незалежно від того, захист від ручного спаму немає.
СФ.

2

У мене є простий підхід до зупинки спамерів, який є на 100% ефективним, принаймні за моїм досвідом, і уникає використання reCAPTCHA та подібних підходів. Після того, як я застосував цей підхід, я перейшов від майже 100 спамів на день на одній із HTML-форм мого сайту на нуль протягом нуля.

Це працює, скориставшись можливостями ALIAS електронної пошти більшості сценаріїв обробки HTML-форм (я використовую FormMail.pl), а також графічний код "подання", який легко створюється в найпростіших графічних програмах. Одна така графіка включає код M19P17nH та підказку "Будь ласка, введіть код зліва".

Цей конкретний приклад використовує випадкову послідовність букв і цифр, але я схильний використовувати неанглійські версії слів, знайомих моїм відвідувачам (наприклад, "pnofrtay"). Зауважте, що підказка для форми форми вбудовується у графіку, а не відображається у формі. Таким чином, для роботи це поле форми не має поняття щодо його мети.

Єдиний справжній трюк тут - переконатися, що ваша форма html присвоює цей код змінній "отримувач". Потім у своїй поштовій програмі переконайтеся, що кожен такий код, який ви використовуєте, встановлений як псевдонім електронної пошти, який вказує на будь-які адреси електронної пошти, які ви хочете використовувати. Оскільки у формі немає жодного запиту на формі, щоб робот читав, і немає електронних адрес, він не має поняття, що потрібно поставити в порожнє поле форми. Якщо в полі форми чи нічого, крім прийнятних кодів, нічого не вводиться, подання форми не вдається з помилкою "поганий одержувач". Ви можете використовувати іншу графіку в різних формах, хоча це, на мій досвід, не дуже потрібно.

Звичайно, людина може вирішити цю проблему миттєво, без усіх проблем, пов’язаних з reCAPTCHA та подібними, більш елегантними схемами. Якщо людський спамер реагує на невдачу одержувача і запрограмує код зображення на робота, ви можете легко змінити його, як тільки зрозумієте, що робот жорстко кодований. За п’ять років використання цього підходу я ніколи не мав спаму від жодної з форм, на яких я його використовую, і ніколи у мене не було скарги від будь-якого людського користувача форм. Я впевнений, що це може бути поборонене здатністю OCR у робота, але я ніколи не бував цього на жодному з моїх сайтів, які використовують форми HTML. Я також використовував "пастки для спаму" (прихований "приходьте сюди" html-код, який вказує на мою політику проти спаму) для хорошого ефекту, але вони були ефективними лише на 90%.


1

Я думаю про багато речей тут:

  1. за допомогою JS (хоча ви цього не хочете) для відстеження руху миші, натискання клавіші, клацання миші
  2. отримання URL-адреса реферала (який у цьому випадку повинен бути одним із одного домену) ... звичайний користувач повинен перейти через веб-сайт, перш ніж отримати контактну форму: PHP: Як отримати URL-адресу реферала?
  3. використовуючи змінну $ _SESSION для отримання IP-адреси та перевіряйте форму подання проти цього списку IP-адрес
  4. Заповніть в одному текстовому полі деякий фіктивний текст, який ви можете перевірити на стороні сервера, чи був він перезаписаний
  5. Перевірте версію браузера: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ... Зрозуміло, що бот не буде використовувати браузер, а лише сценарій. .
  6. Використовуйте AJAX для надсилання полів по одному та перевірки різниці у часі між поданнями
  7. Використовуйте підроблену сторінку до / після форми, просто щоб надіслати інший вклад

Не могли б ви детальніше зупинитися на деяких із цих кроків valicu2000? Чи дійсні вони ще у 2020 році? Дякую.
Майкл Моріарті

0

Ще один варіант замість того, щоб робити випадкові букви та цифри, як це роблять багато веб-сайтів, - це робити випадкові зображення розпізнаваних об'єктів. Потім попросіть користувача ввести або який колір щось на малюнку, або який саме об’єкт.

Загалом, кожне рішення має свої переваги та недоліки. Вам доведеться знайти щасливу серединку між занадто важким для користувачів, щоб передати антиспам механізм, і кількістю спам-ботів, які можуть пройти.


Гарна ідея. Я б не використовував колір як критерій, оскільки це може виключати колоритних користувачів
Ніл Ейткен

Так, хороший момент. Насправді проблема із зображеннями взагалі полягає в тому, що вони недоступні, і, роблячи їх "доступними" за допомогою тегів alt, роботи можуть легко зрозуміти їх.
Брайан

Зображення завжди погана ідея ... текст ледве можна прочитати, я зіткнувся з цим питанням на інших веб-сайтах
valicu2000

Це просто капчу з дуже маленьким поворотом, що робить користувачам складніше. Також він взагалі недоступний.
Міхай П.

0

Роботи не можуть виконувати JavaScript, тому ви робите щось на зразок введення якогось прихованого елемента на сторінку за допомогою JavaScript, а потім виявляєте його присутність перед надсиланням форми, але будьте обережні, оскільки для деяких ваших користувачів також буде відключений JavaScript

В іншому випадку я думаю, що ви змушені будете використовувати форму клієнта, що підтверджує "людяність"


4
Розумні роботи можуть виконувати JavaScript. Виконуючи рішення в JavaScript, ви блокуєте 99% роботів
Бен Шейрман

Якщо бот - плагін для браузера, він зможе виконати javascript і побачити те, що бачить користувач (навіть якщо ви робите деякий флеш або веб-рендерінг)
CoffeDeveloper

Просто використовуйте CSS, щоб розмістити текстове поле над сторінкою, якщо ви турбуєтесь про те, що люди відключені JavaScript.
Chewie The Chorkie

0

Найкраще рішення, яке я знайшов, щоб боти не потрапили спам, - це використовувати дуже тривіальне запитання чи поле у ​​формі.

Спробуйте додати таке поле:

  • Скопіюйте "привіт" у вікно
  • 1 + 1 =?
  • Скопіюйте ім'я веб-сайту у поле

Ці хитрощі вимагають від користувача розуміння того, що повинно бути внесено у форму, тим самим значно важче бути ціллю масивної заповнення форми ботом.

EDIT

Зворотний бік цього методу, як ви заявили у своєму запитанні, є додатковим кроком для перевірки користувачем його форми. Але, на мою думку, це набагато простіше, ніж капча, а накладні витрати при заповненні форми не більше 5 секунд, що здається прийнятним з точки зору користувача.


Як користувач, я ненавиджу це лайно. Я розумію, що спам - це проблема, але як це моя проблема як користувача сайту? Спам про коментарі є проблемою для власника сайту, і, таким чином, користувач не повинен брати на себе тягар запобігання. Якщо ви зайшли в магазин і вас попросили надіти захисні пінетки на черевики, оскільки вони не хотіли мити, що б ви думали тоді? Це займає лише кілька секунд, але це не на вашому тягарі.
Майк

Спам @Miki змушує власників сайту витрачати час. Час - це гроші, те, що я продаю, буде для вас дорожчим. Ваш аргумент можна легко використати, щоб сказати, що "Мені все одно, що ви повинні платити оренду, я хочу заплатити собівартість продукції + 1 $. Як ви платите за оренду мою проблему". Купуючи щось, що ви платите за хостинг, перевезення, час тощо
Mihai P.

@Mike - це ваша проблема, оскільки ви хочете, щоб форма працювала (очевидно, оскільки ви її використовуєте). Машини знаходять навіть найпотужніші сайти, і вони будуть спамувати десятки тисяч подань на день, роблячи ці форми непридатними. Тож наступного разу ви подаєте запитання малому бізнесу, використовуючи форму на їхньому веб-сайті, і вам доведеться додати 9 + 3, щоб це зробити ... і запитайте себе "чому я повинен це робити?" Ваша відповідь може бути "тому що я справді хочу відповісти на своє запитання".
Jimbo Jonny

@JimboJonny Ви повністю пропустили мою думку. Спам - це проблема (як я вже заявила), але є способи її вирішення в сервісному інтерфейсі, які не заважають користувачу. Наразі у мене є контактні форми, розміщені на десятках (сотнях, навіть) веб-сайтах, і спам мінімальний (кілька спам-повідомлень на місяць, за форму), тому що я звертався зі спамом програмно, а не змушуючи користувачів стрибати через обручі. Моя думка не в тому, що спам - це не проблема; це проблема. Моя думка полягала в тому, що існують способи вирішити це, не маючи досвіду користувача.
Майк

@JimboJonny Справа, розгляньте відповіді на це питання з найбільш високим рейтингом (і прийнятих). Ніхто не передбачає будь-якого введення користувачем. Ось так має бути пом'якшення спаму.
Майк

0

Є підручник на сайті JQuery. Хоча це JQuery, ідея не залежить від рамки.

Якщо JavaScript недоступний, можливо, вам доведеться повернутися до підходу типу CAPTCHA.


0

найпростіший спосіб, який я знайшов для цього, - це поставити поле зі значенням і попросити користувача видалити текст у цьому полі. оскільки боти лише їх заповнюють. якщо поле не порожнє, це означає, що користувач не людина, і він не буде розміщений. це те саме призначення капчу.


0

Це просто ідея, я використовував це в моїй програмі і працює добре

ви можете створити файл cookie при русі миші за допомогою javascript або jquery і на стороні сервера перевірити, чи існує cookie, оскільки тільки у людини є миша, cookie може бути створено лише ними.


Цікава ідея! Ви взагалі використовували це в реальному світі?
skybondsor

Це не спрацює. У наші дні спамери використовують програмне забезпечення, яке працює в браузері. Таким чином, вони можуть імітувати користувацький досвід, який створює файл cookie, а потім запускати його x кількість разів, використовуючи різний вміст, що генерується програмним забезпеченням.
Норберт Норбертсон

Це не працює, якщо користувач не використовував мишу. Якщо ваша форма налаштована належним чином, користувач повинен мати можливість заповнити всю форму за допомогою клавіатури. Можна переходити до наступних полів, використовувати пробіл для вибору радіо кнопок, а також використовувати пробіл (або вводити), коли ви клацаєте на кнопку подання
Кенні Джонсон

0

Використовуйте 1) форму з маркерами 2) Перевірте форму, щоб формувати затримку з IP-адресою 3) Блокувати IP (необов’язково)


0

На мій досвід, якщо форма є лише "контактною" формою, вам не потрібні спеціальні заходи. Спам пристойно фільтрується сервісами веб-пошти (ви можете відстежувати запити веб-форм за допомогою серверних скриптів, щоб побачити, що ефективно дістається до вашої електронної пошти, звичайно я припускаю, що у вас є хороша послуга веб-пошти: D)

До речі, я намагаюся не покладатися на сеанси для цього (наприклад, підрахунок, скільки разів натискається кнопка для запобігання перевантажень).

Я не думаю, що це добре. Дійсно, те, що я хочу досягти, - це отримання електронних листів від користувачів, які роблять певні дії, тому що це користувачі, які мене цікавлять (наприклад, користувачі, які переглядали сторінку "CV" та використовували належний контакт форма). Отже, якщо користувач робить щось, що я хочу, я починаю відстежувати його сеанс і встановлюю cookie (я завжди встановлюю cookie сеансу, але коли я не запускаю сеанс, це лише фальшивий файл cookie, який вважають, що користувач має сеанс). Якщо користувач робить щось небажане, я не заважаю вести сеанс для нього, щоб не було перевантажень тощо.

Також мені було б непогано, щоб рекламні послуги пропонували якусь програму (можливо, вона вже існує), щоб побачити, чи користувач "подивився на рекламу", ймовірно, що користувачі, які дивляться на рекламу, є реальними користувачами, але якщо вони не є реально добре принаймні ви отримуєте 1 перегляд все одно, так що нічого не втрачайте. (і повірте, контроль над оголошеннями складніший, ніж все, що ви можете зробити поодинці)


0

Насправді пастка з дисплеєм: жоден не працює як шарм. Це допомагає перемістити декларацію CSS у файл, що містить будь-які глобальні таблиці стилів, що також змусить спам-боти також завантажувати їх (прямий стиль = "display: none;" декларація, можливо, може бути інтерпретована спам-ботом, як це може бути декларація місцевого стилю всередині самого документа).

Це в поєднанні з іншими контрзаходами повинно змусити будь-яких ботів спаму вивантажувати свої сміття (у мене є гостьова книга, захищена різними заходами, і поки що вони потрапили до моїх первинних пасток - однак, чи повинен будь-який бот обійти їх, там інші готові спрацювати).

Я використовую комбінацію підроблених полів форми (також описується як недійсні поля, якщо використовується браузер, який не обробляє CSS взагалі або відображає: жодне зокрема), перевірки правильності (тобто формат вводу дійсне?), маркування часу (як надто швидкі, так і занадто повільні подання), MySQL (для впровадження чорних списків на основі електронної пошти та IP-адрес, а також фільтрів затоплення), DNSBL (наприклад, SBL + XBL від Spamhaus), аналіз тексту ( наприклад, слова, які є сильною ознакою для спаму) та підтвердження електронної пошти (щоб визначити, чи вказана адреса електронної пошти дійсна чи ні).

Одне зауваження щодо листів підтвердження: Цей крок абсолютно необов’язковий, але коли хтось вирішить його реалізувати, цей процес повинен бути максимально простим у використанні (тобто він повинен зводитися до натискання посилання, що міститься в електронній пошті ) і спричинити, щоб вказана електронна адреса була дозволена в певний проміжок часу, щоб уникнути наступних перевірок у випадку, якщо користувач захоче робити додаткові повідомлення.


0
  1. Я використовую метод, де є приховане текстове поле. Оскільки боти розбирають веб-сайт, вони, ймовірно, заповнюють його. Потім я перевіряю, чи він порожній, якщо це не веб-сайт, повертається назад.

  2. Додати підтвердження електронною поштою. Користувач отримує електронний лист і йому потрібно натиснути на посилання. В іншому випадку відкиньте публікацію через якийсь час.


0

Я додав перевірку часу до моїх форм. Форми не надсилатимуться, якщо їх заповнити менше ніж за 3 секунди, і для мене це було чудово, особливо для довгих форм. Ось функція перевірки форми, яку я закликаю натиснути кнопку подання

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

Із все більш досконалими спам-ботами та методами, такими як автоматизовані браузери, визначити джерело спаму стає складніше. Але опубліковані програмним забезпеченням, людиною або обома, спам є спамом через його вміст. Я думаю, що найкращим рішенням є запуск розміщеного вмісту через антиспам API, наприклад Cleantalk або Akismet. Це порівняно дешево і ефективно і не турбує користувачів. Ви можете перевірити терміни подання форми та інші традиційні перевірки на менш складні боти, перш ніж натискати API.


З цікавості, що ви відчуваєте щодо reCAPTCHA? Ви вперше згадуєте про інші платні послуги, але як їх порівнювати з reCAPTCHA та / або чому ви рекомендували б цим послугам отримувати безкоштовну послугу?
Хокі

0

Ви можете спробувати обдурити спам-роботів, додавши правильну дію, яка розподіляється після перевірки Javascript. Якщо робот блокує Javascript, вони ніколи не можуть правильно подати форму.

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()
    });
})

Потім я додаю "зворотний дзвінок" після .attr (), щоб запобігти помилкам.


-1

Тільки мої п’ять копійок коштують. Якщо метою цього є зупинка 99% роботів, що звучить досить непогано, і якщо 99% роботів не можуть запустити Java-скрипт, найкращим рішенням, яке перемагає все, є просто не використовувати форму, яка має дію надіслати з URL-адреса публікації.

Якщо формою керується через java-скрипт, а java-скрипт збирає дані форми і потім надсилає їх через HTTP-запит, жоден робот не може надіслати форму. Оскільки кнопка представлення використовує Java-скрипт для запуску коду, який надсилає форму.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.