Pregunta

He estado leyendo sobre cómo agregar campos de olla de miel a mis formularios para combatir bots/spam. El único problema es que no hay guías ni nada sobre dónde comenzar. Muchos sitios dicen que hacer un campo oculto que solo el bot de correo no deseado completaría. Pero como soy nuevo en esto, no sé dónde comenzaría en mi aplicación. ¿Alguien podría darme el consejo sobre cómo configurar esto? Estoy tratando de hacer que mi página de registro de ideales use campos de olla de miel.

¿Fue útil?

Solución

La idea básica detrás de Honeypot Captchas es que tiene un campo oculto (a través de CSS) llamado algo así como "formulario" o "correo electrónico" o "contenido" que (para un bot que solo lea el nombre del campo) parece que debería completarse. Luego, cuando el servidor mira el envío, se asegura de que estos campos ocultos estén en blanco. Si no lo son, entonces marcas la publicación como un bot.

Aquí hay un ejemplo bien explicado (con algún código en ASP) y Aquí hay una gema Rails que proporciona captchas de honeypot.

Que Gema de rieles Vinculé que es muy fácil de usar una vez instalado:

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

Aunque si está interesado en aprender sobre el enfoque en lugar de solo tenerlo implementado, le recomendaría que lo haga. Si está rodando el suyo, es importante asegurarse de que el campo esté oculto por CSS (o algún otro truco de estilo/posicionamiento) y no input type="hidden" - Como de lo contrario, el bot podría no completar el campo.

Como Michael Mior señaló en los comentarios, es importante tener un mensaje al lado del campo oculto que le dice al usuario que lo deje en blanco; de lo contrario, los usuarios con los lectores de pantalla pueden completarlo erróneamente. Esta característica falta en la gema con la que vinculé - Entonces, si está haciendo un sitio web accesible (que seguramente debería ser), es posible que deba modificarlo o rodar el suyo.


Tenga en cuenta que este truco no es infalible: no hay nada que impida que un bot de hacer la página y determinar qué campos son realmente visibles para el usuario antes de llenar cualquiera, pero ese tipo de bot sería considerablemente más complejo que uno que parecía en el formulario html. Es probable que un captcha honeypot sea muy efectivo para detener los bots simples.

Otros consejos

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; no se muestra a un bot en HTML (pruébelo con la fuente de vista)visibility: hidden; left:-500px; top:-500px; (se muestra cuando ve la fuente)

Utilicé la pantalla: ninguna de las macetas de miel por un tiempo, luego cambié a la opción de visibilidad cuando se me ocurrió que el campo no se mostró en el código fuente. Hágalo con una clase o identificación en CSS, no en el estilo en línea. Notificar a los usuarios con etiqueta es una buena idea, y el nombre no es tan importante porque la mayoría de los bots generalmente completan todos los campos.

Definitivamente no es una captura, excepto muy efectiva, si se usa con una captcha de matemáticas básicas.

Probar invisible_captcha (Admite Rails 3, 4 y 5).

Funciona bastante bien para sitios pequeños y medianos (en términos de tráfico), con un enfoque simple y flexible. También proporciona presentaciones sensibles al tiempo.

Uso básico

En tu forma:

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

En tu controlador:

class TopicsController < ApplicationController
  invisible_captcha only: [:create, :update]
  ...
end
<div id="honeypotdiv">
If you see this, leave it blank. Only bots should see this
<input type="text" name="body" value="" />
</div>

Y esta es mi olla de miel:

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

Si todavía está paranoico con esto, intente un enfoque más: use JavaScript para borrar el campo una vez que el usuario llenó por error el valor y concéntrese en el siguiente cuadro de texto. También puede pedirle al usuario que haga una matemática simple como responder: 1+2 =?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top