Подтвердить что ты не робот

Как добавить в мои формы поля Honey pot?

Я читал о добавлении полей Honey pot в свои формы для борьбы с ботами/спамом. Только проблема заключается в том, что у них нет руководства или чего-либо в том, с чего начать. Многие сайты говорят, что нужно скрыть поле, которое только спам-бот заполнит. Но поскольку я новичок в этом, не знаю, где я начну в своем приложении. Может ли кто-нибудь дать мне совет о том, как это сделать? Я пытаюсь сделать страницу регистрации Devise использующей поля медового банка.

4b9b3361

Ответ 1

Основная идея captchas honeypot заключается в том, что у вас есть скрытое (через CSS) поле с именем "форма" или "электронная почта" или "контент", которое (боту, просто читающему имя поля) выглядит так, как будто оно должно быть заполняется. Затем, когда сервер смотрит на представление, вы убедитесь, что эти скрытые поля пусты. Если это не так, вы помещаете сообщение в качестве бота.

Вот хорошо объясненный пример (с некоторым кодом в ASP) и здесь Rails Gem, который обеспечивает захват honeypot.

Что Rails Gem Я связал, похоже, очень легко использовать после установки:

  <% form_tag comments_path, :honeypot => true do -%>
  ...
  <% end -%>

Хотя, если вам интересно узнать о подходе, а не просто реализовать его, я бы посоветовал вам использовать свой собственный. Если вы катаетесь самостоятельно, важно убедиться, что поле скрыто CSS (или другим трюком стиля/позиционирования), а не input type="hidden" - так как иначе бот может не заполнить поле.

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


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

Ответ 2

HTML - 
<input type="text" name="verifyEmail" id="verifyEmail">

PHP Validation -
if(strlen($_POST['verifyEmail']) > 0){
   header('location: {some redirect URL here..}'); //Send them way away from your form :)
die(); //Stop execution of the script
}

CSS - 
#verifyEmail{
position:fixed; 
visibility: hidden; 
top:-500px; left:-500px;
}

dislplay: none; не отображается боту в HTML (попробуйте его с исходным кодом) visibility: hidden; left:-500px; top:-500px; (отображается при просмотре источника)

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

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

Ответ 3

Попробуйте invisible_captcha (поддерживает Rails 3, 4 и 5).

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

Основное использование

В вашей форме:

<%= form_for(@topic) %>
  <%= invisible_captcha %>
  ...
<% end %>

В вашем контроллере:

class TopicsController < ApplicationController
  invisible_captcha only: [:create, :update]
  ...
end

Ответ 4

<div id="honeypotdiv">
If you see this, leave it blank. Only bots should see this
<input type="text" name="body" value="" />
</div>

Ответ 5

и это мой медовый горшок:

<input id="email" name="emails" style="border:none"></br>

Если вы все еще параноик с этим, попробуйте еще один подход: Используйте javascript, чтобы очистить поле, как только пользователь ошибочно заполнил значение и сосредоточился на следующем текстовом поле. Вы также можете попросить пользователя сделать простую математику, как ответить: 1 + 2 =?