Proteger Formularios
Uno de los mayores problemas a los que nos enfrentamos cuando tenemos formularios de entrada de datos cuando publicamos nuestra aplicación en Internet es que así como nuestros usuarios pueden verlos, también lo ven los bots de spam pudiendo estos últimos ingresar una cantidad de datos basura que pueden afectarnos.
Para evitar estos problemas tenemos muchas opciones, una de ellas es crear campos que existan en el formulario pero que no sean visibles para el usuario, por lo que al momento de enviar dicho formulario, este campo debe estar en blanco, en caso que no lo esté, sabremos que es un bot quien intenta acceder a nuestra aplicación.
Formulario
Los bots usualmente buscan campos comunes como username, email, mail, etc. Por ello lo que debemos hacer es crear un campo que contenga alguna de estas palabras y que no sea visible al usuario. Para ocultarlo podemos utilizar CSS, veamos en la siguiente imagen como podemos crear un formulario con un campo trampa para los bots.
Nos fijamos que tenemos nuestros campos usuales de username, password, email, estos campos son los que nos interesan, pero para confundir al bot de spam creamos un campo “no_email” que al contener la palabra email los atrae, luego en la definición de la clase form de Laravel le decimos que va a tener un estilo CSS de display: none, esto hace que cuando se muestre la vista el usuario humano no vea el campo.
Ruta de la Validación
Ahora debemos crear una ruta donde vamos a validar que nuestro campo trampa sea vacío, en caso de no serlo sabremos que es un bot de spam y no tomamos en cuenta esos datos que envía el formulario, veamos en la siguiente imagen como debe lucir la ruta:
Lo que hacemos acá es inicialmente establecer las reglas del formulario, indicamos cuales son los campos requeridos y su tipo, en el caso del no_email le asignamos una regla personalizada llamada honey_pot, este es el nombre con el cual se conoce a este tipo de validación, así que si tenemos dudas podemos hacer una búsqueda en Google y encontraremos más información.
Luego validamos con la clase Validator como normalmente lo haríamos, lo interesante es que al final de nuestro ejemplo hemos definido la regla del honey_pot utilizando la clase Validator de Laravel, aquí le indicamos que el valor debe ser vacío.
Ya con esto cuando hagamos el llamado al formulario y lo ejecutemos, si el valor no_email está lleno se disparará un error, un dato interesante que no está en el ejemplo es que si se dispara un error por esta validación sería bueno enviar a una página en blanco para forzar al bot a ir a otro lugar diferente de nuestra aplicación.