Desarrollo web

Proteja los formularios usando la técnica Honeypot Laravel Spam Protection

El framework Laravel tiene una potente protección contra la inyección de CSRF, XSS y SQL, pero no cuenta con protección antispam incorporada.

Si necesitas proteger tu formulario de los bots de spam, puedes usar algo como Akismet o ReCaptcha que brindan una sólida protección.


Ok, pero quizás no les guste a tus usuarios, debido a las imágenes molestas que pueden aparecer de vez en cuando o al resolver esos acertijos para enviar el formulario.

Para mí, creo que la técnica honeypot es mucho mejor en muchos casos, donde hay un campo oculto en el formulario y al enviar ese campo, una regla de validación validará este campo si es de longitud cero o no y si la longitud del valor del campo no es cero, eso significa que hay un bot tratando de enviar el formulario.

Bueno, ensuciémonos las manos.



Laravel Spam Protection

En routes.php, las rutas se ven así:

Y en el directorio de vistas, el formulario de registro o cualquier tipo de formulario será así:

En el archivo del controlador, debes escribir las reglas de validación de esta manera:

No olvides agregar las instrucciones de uso en la parte superior del archivo del controlador:

En la validación anterior, hemos creado un nuevo validador llamado honey_pot que busca el campo honey_pot y si el campo no está vacío, la regla dará como resultado falso.

Ahora, si cualquier spambot intenta rellenar el formulario, caerá en la trampa del campo honeypot, que debería ser de longitud cero.


Crear un Middleware

Puedes aplicar esta técnica de protección antispam para todos los formularios de Laravel; puedes crear un middleware para verificar la solicitud POST si el campo honey_pot es de longitud cero o no.

Primero, creas el middleware:

php artisan make:middleware HoneyBot

Luego, compruebas el campo honey_pot en el middleware de esta manera:

Y no olvides aplicar tu middleware. Puedes aplicarlo globalmente a todas las solicitudes, agregando el middleware a la matriz de middleware en el archivo app/HTTP/kernel.php.

\App\Http\Middleware\HoneyBot::class

Ahora puedes eliminar las reglas de validación del formulario y confiar en el middleware. ¡Genial!


Otra solución

Algunos robots de spam pueden ser lo suficientemente astutos como para detectar esos campos ocultos y nunca tocarlos. Entonces, ¿cuál es la solución para esto?

Bueno, puedes agregar otro campo oculto que incluya el tiempo de envío del formulario y cuando el usuario o el bot envíen el formulario, puede verificar la diferencia de tiempo entre el tiempo de presentación y el tiempo de envío, si es menos de tres segundos o más , eso significa que la presentación proviene de un bot de spam.

Hay paquetes listos para usar con este propósito, pero como puedes ver, la solución está en una simple línea.

De nuevo, no estoy diciendo que Google reCaptcha no sea una buena opción, en realidad es una opción increíble. Si tienes la oportunidad de usarlo, no lo dudes.

Espero que encuentres útil la publicación. Sigue regresando.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *