Как предотвратить роботы от автоматического заполнения бланка?

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

Я попытался установить некоторые скрытые поля во всех моих формах, с display: none; Однако я уверен, что сценарий может быть настроен, чтобы проследить тот полевой идентификатор формы и просто не заполнить его.

Вы реализуете/знаете хорошего анти-automatic-form-filling-robots метода? Есть ли что-то, что может быть сделано беспрепятственно с HTML И/ИЛИ серверной обработкой, и быть (почти) пуленепробиваемым? (без JS, поскольку можно было просто отключить его).

Я пытаюсь не полагаться на сессии для этого (т.е. рассчитываю, сколько раз кнопка нажата для предотвращения перегрузок).

102
задан Gal 14 December 2016 в 09:47
поделиться

10 ответов

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

Боты запрашивают страницу, анализируют страницу и отправляют форму. Это быстро.

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

Разница во времени может быть незначительной; и как отслеживать это время без файлов cookie, требуется какой-то способ серверной базы данных. Это может сказаться на производительности.
Также вам нужно настроить пороговое время.

71
ответ дан 24 November 2019 в 04:29
поделиться

Лучшее решение, которое я нашел, чтобы избежать спама от ботов - это использование очень тривиального вопроса или поля в вашей форме.

Попробуйте добавить поле вроде этого :

  • Скопируйте "hello" в поле в сторону
  • 1+1 = ?
  • Скопируйте название сайта в поле

Эти трюки требуют от пользователя понимания того, что должно быть введено в форму, что значительно усложняет задачу массового заполнения формы ботами.

EDIT

Обратной стороной этого метода, как вы указали в своем вопросе, является дополнительный шаг для пользователя по валидации формы. Но, на мой взгляд, это намного проще, чем капча, и накладные расходы при заполнении формы составляют не более 5 секунд, что кажется приемлемым с точки зрения пользователя.

0
ответ дан 24 November 2019 в 04:29
поделиться

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

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

Если вы создадите текстовое поле, спрячете его в javascript, а затем проверите, что значение пустое на сервере, это отсеет 99% роботов и не вызовет у 99% ваших пользователей никакого разочарования. Оставшийся 1% пользователей, у которых отключен javascript, все равно увидят текстовое поле, но вы можете добавить сообщение типа "Оставьте это поле пустым" для таких случаев (если они вас вообще волнуют).

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

73
ответ дан 24 November 2019 в 04:29
поделиться

http://recaptcha.net/

reCAPTCHA - бесплатный антибот-сервис, помогающий оцифровывать книги

Он был приобретен Google (в 2009 году):

Также смотрите

8
ответ дан 24 November 2019 в 04:29
поделиться

Роботы не могут выполнять JavaScript, поэтому вы делаете что-то вроде инъекции какого-то скрытого элемента на страницу с JavaScript и затем обнаруживаете его присутствие до отправки формы, но остерегайтесь, потому что у некоторых ваших пользователей JavaScript также будет отключен

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

0
ответ дан 24 November 2019 в 04:29
поделиться

Очень простой способ - предоставить некоторые поля, например и отбрасывать все ответы, в которых они заполнены.

Другой подход - генерировать всю форму (или только названия полей) с помощью Javascript; немногие боты могут его запустить.

В любом случае, вы мало что сделаете против живых "ботов" из Тайваня или Индии, которым платят $0.03 за одну размещенную ссылку, и они зарабатывают себе на жизнь таким образом.

2
ответ дан 24 November 2019 в 04:29
поделиться

Другой вариант вместо случайных букв и цифр, как это делают многие сайты, - это случайные картинки с узнаваемыми объектами. Затем попросить пользователя ввести, какого цвета что-то на картинке, или что это за объект.

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

0
ответ дан 24 November 2019 в 04:29
поделиться

Многие из этих спам-ботов - это просто серверные скрипты, которые бродят по сети. Вы можете бороться со многими из них, используя некоторый 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.');
}

?>

Кроме того, капчи - отличное средство защиты от спама.

6
ответ дан 24 November 2019 в 04:29
поделиться

На сайте JQuery есть учебник об этом. Хотя это JQuery, идея не зависит от фреймворка.

Если JavaScript недоступен, возможно, вам придется вернуться к подходу типа CAPTCHA.

0
ответ дан 24 November 2019 в 04:29
поделиться

простой способ, который я нашел, это поместить поле со значением и попросить пользователя удалить текст в этом поле. поскольку боты только заполняют их. если поле не пустое, это означает, что пользователь не человек, и оно не будет опубликовано. это та же цель, что и код captcha.

0
ответ дан 24 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: