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

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

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

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

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

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

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

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

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

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

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

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

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

    Что, если – Бот не находит никакой form вообще?

    3 примера:

    1. Вставьте свою форму с помощью AJAX

    если вы в порядке с пользователями, у которых отключен JS и не может видеть / отправлять форму … Вы всегда можете уведомить их, используя

    ERROR: The form could not be loaded. Please, re-enable JavaScript in your browser to fully enjoy our services.

    ERROR: The form could not be loaded. Please, re-enable JavaScript in your browser to fully enjoy our services.

    . чем,

    1. Создайте form.html и поместите свою form внутри элемента

      .

    2. Чем внутри страницы, где вам нужно вызвать эту форму, используйте пустой

      и этот jQuery:

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

    2. Создайте свою форму полностью с помощью JS

     // THE FORM var $form = $("
    ", { appendTo : $("#formContainer"), class : "myForm", submit : AJAXSubmitForm }); // EMAIL 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 $("",{ name : "Message", // Needed for serialization placeholder : "Your message", appendTo : $form }); // SUBMIT BUTTON $("",{ 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; } 
      

    То, что я сделал, – это использовать скрытое поле и поместить на него метку времени, а затем сравнить ее с меткой времени на сервере с помощью PHP.

    Если это было быстрее, чем 15 секунд (в зависимости от того, насколько большими или малыми являются ваши формы), это был бот.

    Надеюсь, что эта помощь

    Очень эффективный способ практически исключить спам – иметь текстовое поле с текстом в нем, например «Удалить этот текст, чтобы отправить форму!». и этот текст необходимо удалить, чтобы отправить форму.

    После проверки формы, если текстовое поле содержит исходный текст или какой-либо случайный текст, не отправляйте форму. Боты могут читать имена форм и автоматически заполнять поля «Имя» и «Электронная почта», но не знают, нужно ли им фактически удалять текст из определенного поля для отправки.

    Я реализовал этот метод на нашем корпоративном веб-сайте и полностью ликвидировал спам, который мы ежедневно получали. Это действительно работает!

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

    http://recaptcha.net/

    reCAPTCHA – бесплатная служба антивируса, которая помогает оцифровывать книги

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

    Также см

    Многие из этих спам-ботов – это просто сценарии на стороне сервера, которые разворачивают Интернет. Вы можете сразиться со многими из них, используя некоторый javascript, чтобы манипулировать запросом формы перед его отправкой (т. Е. Установить дополнительное поле на основе некоторой клиентской переменной). Это не полное решение и может привести к множеству проблем (например, пользователям без javascript, на мобильных устройствах и т. Д.), Но это может быть частью вашего плана атаки.

    Вот тривиальный пример …

      
    .

    Где-то в вашем php-скрипте …

      

    Кроме того, captchas отличные и действительно лучшая защита от спама.

    Я удивлен, что никто еще не упомянул об этом методе:

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

    Плюсы:

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

    Минусы:

    • добавляет один HTTP-запрос
    • требуется, чтобы cookies были включены на клиенте

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

    С появлением безмолвных браузеров (например, phantomjs), которые могут подражать чему-либо, вы не можете предположить, что:

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

    Если это было правдой, это уже не так.

    Если у вас нет удобного для пользователя решения, просто дайте им красивую кнопку «Я спамер» submit :

        

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

        

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

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

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

    В любом случае, вы не будете делать много против живых «ботов» из Тайваня или Индии, которые выплачиваются в размере 0,03 доллара за одну опубликованную ссылку и зарабатывают себе на жизнь таким образом.

    У меня есть простой подход к остановке спамеров, который на 100% эффективен, по крайней мере, по моему опыту, и избегает использования reCAPTCHA и подобных подходов. В течение последних 5 лет после того, как я реализовал этот подход, я перешел от 100 до 100 спамов в день на одном из html-форм моих сайтов.

    Он работает, используя возможности электронной почты ALIAS для большинства скриптов обработки HTML-файлов (я использую FormMail.pl) вместе с графическим представлением «код», который легко создается в самых простых графических программах. Один такой рисунок включает код M19P17nH и приглашение «Пожалуйста, введите код слева».

    В этом конкретном примере используется случайная последовательность букв и цифр, но я предпочитаю использовать не английские версии слов, знакомых моим посетителям (например, «pnofrtay»). Обратите внимание, что приглашение для поля формы встроено в графику, а не появляется в форме. Таким образом, для робота это поле формы не дает никакого представления о его назначении.

    Единственный реальный трюк здесь – убедиться, что ваша форма html присваивает этот код переменной «получатель». Затем в вашей почтовой программе убедитесь, что каждый такой код, который вы используете, задается как псевдоним электронной почты, который указывает на любые адреса электронной почты, которые вы хотите использовать. Поскольку в форме нет приглашения для робота для чтения и адресов электронной почты, он не знает, что положить в поле пустой формы. Если он ничего не помещает в поле формы или что-либо кроме приемлемых кодов, представление формы не выполняется с ошибкой «плохой получатель». Вы можете использовать другую графику в разных формах, хотя в моем опыте это не обязательно.

    Конечно, человек может решить эту проблему мгновенно, без проблем, связанных с reCAPTCHA и аналогичными, более элегантными схемами. Если человеческий спамер отвечает на отказ получателя и программирует код изображения в роботе, вы можете легко его изменить, как только вы поймете, что робот был жестко запрограммирован для ответа. В течение пяти лет использования такого подхода у меня никогда не было спама из тех форм, на которых я его использую, и у меня никогда не было жалобы от любого человека-пользователя форм. Я уверен, что это может быть избито с помощью возможностей OCR у робота, но я никогда не делал этого на любом из моих сайтов, которые используют html-формы. Я также использовал «спам-ловушки» (скрытый «прийти сюда» html-код, который указывает на мои политики защиты от спама), но они эффективны только на 90%.

    Я думаю о многом:

    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. Используйте поддельную страницу до / после формы, просто для отправки другого ввода

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

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

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

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

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

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

    РЕДАКТИРОВАТЬ

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

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

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

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

    Его просто идея, id использовал это в моем приложении и хорошо работает

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

    Используйте 1) форму с токенами 2) Проверьте форму, чтобы сформировать задержку с IP-адресом. 3) Блокировать IP (необязательно)

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

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

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

    Также мне было бы приятно, чтобы рекламные услуги предлагали какой-то api (возможно, это уже существует), чтобы увидеть, «если пользователь« посмотрел на объявление », вполне вероятно, что пользователи, просматривающие рекламу, являются настоящими пользователями, но если они не являются действительно хорошо, по крайней мере, вы получаете 1 вид в любом случае, так что ничего не потеряете. (и доверяйте мне, элементы управления рекламой более сложны, чем все, что вы можете сделать в одиночку)

    На самом деле ловушка с дисплеем: никто не работает как шарм. Это помогает переместить объявление CSS в файл, содержащий любые глобальные таблицы стилей, что заставило бы спам-ботов также загружать их (объявление прямого стиля = “display: none;”, вероятно, может быть интерпретировано спам-ботом, а также декларация локального стиля внутри самого документа).

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

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

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

    1. Я использую метод, где есть скрытое текстовое поле. Поскольку боты анализируют веб-сайт, они, вероятно, заполняют его. Затем я проверю его, если он пуст, если он не вернулся на веб-сайт.

    2. Добавьте подтверждение по электронной почте. The user receives an email and he needs to click a link. Otherwise discard the post in some time.

    I’ve added a time check to my forms. The forms will not be submitted if filled in less than 3 seconds and this was working great for me especially for the long forms. Here’s the form check function that I call on the submit button

     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 } 

    You can try to cheat spam-robots adding the correct action atribute after Javascript validation. so if the robot block javascript they never submit correctly the form.

    HTML

     
    //your inputs

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

    I add a “callback” after .attr() to prevent errors

    With increasingly sophisticated spam bots and techniques like automated browsers, it will become harder to determine the source of spam. But whether posted by software, a human, or both, spam is spam because of its content. I think the best solution is to run the posted content through an anti-spam API like Cleantalk or Akismet. It’s relatively cheap and effective and doesn’t hassle the user. You can check form submission times and the other traditional checks for less sophisticated bots before hitting the API.

    Robots cannot execute JavaScript so you do something like injecting some kind of hidden element into the page with JavaScript and then detecting it’s presence prior to form submission but beware because some of your users will also have JavaScript disabled

    Otherwise I think you will be forced to use a form of client proof of “humanness”

    Just my five cents worth. If the object of this is to stop 99% of robots which sounds pretty good, and if 99% of robots can’t run Java-script the best solution that beats all is simply to not use a form that has an action of submit with a post URL.

    If the form is controlled via java-script and the java-script collects the form data and then sends it via a HTTP request, no robot can submit the form. Since the submit button would use Java-script to run the code that sends the form.

    Давайте будем гением компьютера.