Cómo crear Honeypot para combatir el spam de formularios en Laravel
Una vez que su sitio web entre en funcionamiento muy pronto, comenzará a recibir spam de los formularios de su sitio web. Los spambots escriben un programa de computadora que simplemente completa su formulario con información falsa. Es un dolor de cabeza para los propietarios de sitios limpiar estos datos no deseados y proteger su base de datos de esos registros innecesarios. Este artículo está escrito para las personas que crearon su aplicación usando Laravel. Estudiaremos cómo se pueden proteger sus formularios del spam en Laravel.
El usuario puede agregar reCAPTCHA en su formulario que probará si los valores del formulario son llenados por humanos o no. Pero al hacerlo, sus usuarios deben resolver el rompecabezas antes de enviar un formulario. Otra forma es agregando la última versión de Google reCAPTCHA. Pero mostrará un icono de reCAPTCHA en la esquina inferior derecha de su sitio web.
A la mayoría de los propietarios de sitios no les gustan los captchas. Y si odias los captchas, mantén un honeypot en tus formularios que atraparía a los spambots.
En su mayoría, los spambots son tontos, podemos decir, ya que simplemente llenan todos los campos de su formulario. No saben qué campos de formulario están realmente en uso para procesos posteriores. Podemos aprovechar este escenario y agregar un campo de entrada ficticio (honeypot) a nuestro formulario. Este campo oculto debe permanecer vacío en el momento de enviar el formulario. Entonces, mientras verifica en el lado del servidor si este campo oculto está vacío, será un envío de formulario válido y, si no está vacío, será spam. Habiendo dicho eso, echemos un vistazo a cómo crear honeypot y proteger los formularios de sitios web del spam.
Cree Honeypot y evite el correo no deseado
Como dijimos, usando un campo oculto podemos engañar a los spambots y detener el envío de formularios en el lado del servidor. Para este propósito, usaremos el paquete laravel-honeypot. Con este paquete, un usuario puede proteger uno o más formularios fácilmente. No necesitan escribir código del lado del servidor para cada formulario por separado.
Para la instalación del paquete, abra la terminal en el directorio raíz de su proyecto y ejecute el comando:
composer require spatie/laravel-honeypot
Tras la instalación del paquete, publique el archivo de configuración del paquete con el comando:
php artisan vendor:publish --provider="SpatieHoneypotHoneypotServiceProvider" --tag=config
Este comando agregará un honeypot.php
archivo en el config
directorio. No es necesario modificar el archivo de configuración. En su lugar, .env
agregue en el archivo la constante que se muestra a continuación.
HONEYPOT_NAME=honeypot_for_bots
Aquí le dimos el nombre ‘honeypot_for_bots’ que será el nombre de su campo oculto. Puede establecer cualquier otro nombre para esta constante.
A continuación, registre el middleware global que protegerá todos sus formularios desde un solo lugar.
appHttpKernel.php
<?php
…
…
protected $middleware = [
// ...
SpatieHoneypotProtectAgainstSpam::class,
];
¡Todo listo! Ahora vaya a su formulario y agregue el honeypot agregando @honeypot
en el formulario HTML. Su archivo blade se verá más abajo.
<form action="" method="post">
@honeypot
<input type="text" name="fullname" placeholder="Full Name" />
<input type="submit" name="submit" value="Submit" />
{{ csrf_field() }}
</form>
Ahora, si los spambots intentan enviar spam en su formulario, el paquete descartará la solicitud. Como resultado, no terminará más spam en su base de datos.
Artículos relacionados
- Una guía para agregar Google reCAPTCHA v3 a su sitio web de Laravel
- Cómo usar eventos y oyentes de Laravel en su aplicación