Предотвращение отправки формы бота

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

это предотвратит ботов или бот может понять это слишком легко? Ниже приведен код и JSFIddle для демонстрации моего идея:

JSFIDDLE

$('button').click(function () {
  if(Confirm()) {
    alert('Form submitted');
    /* perform a $.post() to php */
  }
  else {
    alert('Form not submitted');
  }
});

function Confirm() {
  var _question = confirm('Are you sure about this?');
  var _response = (_question) ? true : false;
  return _response;
}

9 ответов


Это одна проблема, с которой столкнулись многие люди. Как указывает pst, бот может просто отправлять информацию непосредственно на сервер, минуя javascript (см. простые утилиты, такие как cURL и почтальон). Многие боты теперь способны потреблять и взаимодействовать с javascript. Хари Кришнан указывает на использование капчу, наиболее распространенным и успешным из которых (насколько мне известно) является reCaptcha. Но капча есть их проблемы и обескуражены сборником Всемирной паутины, главным образом по причинам неэффективность и недоступность.

и чтобы мы не забыли, злоумышленник всегда может развернуть человеческий интеллект, чтобы победить капчу. Есть истории о нападавших, платящих за людей, чтобы взломать captchas для целей спама, без того, чтобы работники понимали, что они участвуют в незаконной деятельности. Amazon предлагает услугу под названием "Механического Турка" это решает такие вещи. Amazon будет усиленно возражать, если вы будете использовать свой сервис для вредоносных целей, и у него есть обратная сторона-стоимость денег и создание бумажного следа. Тем не менее, есть больше erhm провайдеры, которые не будут иметь таких возражений.

так что вы можете сделать?

мой любимый механизм-скрытый флажок. Сделайте так, чтобы на нем был ярлык " согласны ли вы с условиями использования наших услуг?- может быть, даже со ссылкой на некоторые серьезные условия. Но вы по умолчанию снимаете флажок и скрываете его через css: поместите его со страницы, поместите его в контейнер с нулевой высотой или нулевой шириной, поместите div поверх него с более высоким Z-индексом. Сверните здесь свой собственный механизм и проявите творческий подход.

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

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

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

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

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

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

обновление по поводу капчи-х

Я некоторое время думал об обновлении этого вопроса относительно темы компьютерного зрения и представления формы. Недавно появилась статья, которая указала мне на это сообщение в блоге Стива Хиксона, энтузиаст компьютерного зрения. Снэпчат (видимо некоторые социальные медиа-платформы? Я никогда не пользовался им, чувствуя себя старше с каждым днем...) запустил новую капчу-подобную систему, где вы должны идентифицировать картинки (мультфильмы, действительно), которые содержат призрак. Стив доказал, что это не подтверждает приседания об отправителе, потому что, как правило, компьютеры лучше и быстрее идентифицируют этот простой тип изображения.

Это не трудно представьте себе расширение аналогичного подхода к другим типам Captcha. Я сделал поиск и нашел эти ссылки интересными, а также:

это капча сломалась?
практические, не изображения на основе Captchas
если мы знаем, что CAPTCHA можно победить, почему мы все еще используем их?
есть ли реальная альтернатива использованию изображений CAPTCHA?
как трио хакеров поставили Google reCaptcha на колени - дополнительные интересно, потому что речь идет об аудио Captchas.

О, и мы вряд ли были бы полными без обязательного комикс XKCD.


сегодня я успешно остановил непрерывный спам моей формы. Конечно, этот метод не всегда срабатывает, но он прост и хорошо работает в данном конкретном случае.

Я сделал следующее:

  • Я устанавливаю свойство action формы в mustusejavascript.asp который просто показывает сообщение о том, что представление не работает и что посетитель должен иметь javascript включен.

  • Я устанавливаю форму свойство onsubmit для функции javascript, которая устанавливает свойство action формы на реальную страницу получения, например receivemessage.asp

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


ваш код не будет препятствовать отправке бота, но это не из-за того, как ваш код. Типичный бот там, скорее всего, сделает внешний / автоматический запрос POST на URL (). Типичные боты не визуализируют HTML, CSS или JavaScript. Они читают HTML и действуют на них, поэтому любая логика клиента не будет выполнена. Например, Керлинг URL-адреса получит разметку без загрузки или оценки любого JavaScript. Можно создать простой скрипт, который ищет <form> а затем делает сообщение CURL для этого URL с соответствующими ключами.

имея это в виду, серверное решение для предотвращения подачи бота необходимо. Captcha + CSRF должно быть достаточно. (http://en.wikipedia.org/wiki/Cross-site_request_forgery)


вы можете просто добавить captcha в форму. С капчей будет different а также в images, боты не могут decode что. Это одна из наиболее широко используемых систем безопасности для всех жителей Запада...


вы можете измерить время регистрации, предлагаемое нет необходимости заполнять вечность текстовыми полями!


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


вы все еще думаете, что Captcha или ReCap безопасны ?

боты nowDays умны и могут легко распознавать буквы на изображениях с помощью инструментов OCR (поиск для его понимания)

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

Это все, когда бот или любой зомби представить форма, которую вы проверяете, равен ли данный хэш сохраненному хэшу сеанса;)

для получения дополнительной информации прочитайте о CSRF !


я столкнулся с проверкой ввода формы, которая помешала регистрации программного ввода.

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

    ;failed automation attempt because window doesnt register changes.
    ;$iUse = _IEGetObjById($nIE,"InternalUseOnly_id")
    ;_IEAction($iUse,"focus")        
    ;_IEAction($iUse,"click")
    ;_IEFormElementOptionSelect($iUse,1,1,"byIndex")
    ;$iEdit = _IEGetObjById($nIE,"canEdit_id")
    ;_IEAction($iEdit,"focus")
    ;_IEAction($iEdit,"click")
    ;_IEFormElementOptionSelect($iEdit,1,1,"byIndex")
    ;$iTalent = _IEGetObjById($nIE,"TalentReleaseFile_id")
    ;_IEAction($iTalent,"focus")
    ;_IEAction($iTalent,"click")
    ;_IEFormElementOptionSelect($iTalent,2,1,"byIndex")
    ;Sleep(1000)
    ;_IEAction(_IETagNameGetCollection($nIE,"button",1),"click")

Это заставило меня переосмыслите, как вход может быть введен путем прямого манипулирования действиями мыши для имитации большего выбора с поведением типа мыши. Излишне говорить, что мне не придется вручную загружать изображения 1 на 1 для обновления изображений продуктов для компаний. используется номер windows перед буквами, чтобы иметь мой скрипт в конце каталога, и когда всплывает окно загрузки изображения, я должен использовать active accessibility, чтобы получить syslistview из окна и выбрать 2-й элемент, который является изображением, 1-й элемент является папка. или первый элемент в findfirstfile возвращает только файлы звонка. Я использую имя для поиска элемента в базе данных элементов, а затем получаю доступ к этим элементам и обновляю несколько атрибутов после загрузки изображений,затем перемещаю файл из этой папки в другую папку, чтобы он не обрабатывался снова и не перемещался на следующий первый файл в списке и цикле, пока имя сценария не будет найдено в конце обновления.

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

С уважением.


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

    function spamChk() {
    var ent1 = document.MyForm.Email.value
    var str1 = ent1.toLowerCase();
    if (str1.includes("noreply")) {
    document.MyForm.reset();
    }

<input type="text" name="Email" oninput="spamChk()">

Я действительно пришел сюда сегодня, чтобы узнать, как перенаправить определенные IP-адреса спам-ботов на H E L L .. просто для удовольствия