Una de las formas en las cuales podemos prevenir el spam en nuestro sitio web es utilizando una pequeña técnica conocida como honeypot (tarro de miel). Esta técnica consiste, principalmente, en colocar una pequeño señuelo con el fin que un posible atacante caiga en él y de esta forma proteger nuestro sistema.
En esta ocasión implementaremos dicha técnica a través de nuestros formularios Flask.
Lo primero que vamos a hacer es crear un nuevo campo a nuestro formulario RegisterForm, esto con la finalidad de prevenir que algún atacante intente generar miles de cuentas válidas en nuestro sitio web.
El campo será de tipo HiddenField, esto quiere decir que el usuario final no podrá visualizar dicho campo en el navegador, por lo tanto se espera que el campo llegue al servidor sin ningún tipo de valor.
from wtforms import Form, HiddenField
class RegisterForm(Form):
...
honeypot = HiddenField("", [ length_honeypot] )
Agregamos una pequeña validación a nuestro campo. Si el campo contiene algún valor levantamos un error.
def length_honeypot(form, field):
if len(field.data) > 0:
raise validators.ValidationError('Solo los humanos pueden completar el registro!')
La función fácilmente puede ser remplzada por una validación (por ejemplo lenght) del modulo validators.
En nuestro template renderizamos el campo. No colocaremos ningún tipo de estilo ya que el campo es hidden.
{{ render_field(form.honeypot) }}
Y listo, prácticamente con estas líneas de código podemos implementar nuestra trampa en un formulario. Si algún tipo de bot quiere generar usuarios inválidos hará la petición enviando valores para todos los campos (No sabrá diferenciar entre un campo oculto y uno visible). Al recibir un valor en el campo honeypot, un valor que no se espera por parte de un usuario normal, la validación será inválida.
-
Módulo 1 | 17 clases
Introducción y Fundamentos
expand_more-
play_circle_outline
Clase 1
Introducción al curso de Python Web
-
play_circle_outline
Clase 2
Qué es Flask
-
play_circle_outline
Clase 3
WSGI python
-
play_circle_outline
Clase 4
Entorno de desarrollo e instalación de Flask
-
play_circle_outline
Clase 5
Crear servidor de Flask
-
play_circle_outline
Clase 6
Hola mundo (primera página web)
-
play_circle_outline
Clase 7
Renderizar template
-
play_circle_outline
Clase 8
Páginas web dinámicas
-
play_circle_outline
Clase 9
Ciclos y condicionales
-
play_circle_outline
Clase 10
Plantillas Jinja2
-
play_circle_outline
Clase 11
Parámetros
-
play_circle_outline
Clase 12
¿Qué es el query string?
-
play_circle_outline
Clase 13
Lectura de queries
-
play_circle_outline
Clase 14
Archivos estáticos
-
play_circle_outline
Clase 15
Herencia de plantillas
-
play_circle_outline
Clase 16
Links
-
play_circle_outline
Clase 17
Callbacks
-
-
Módulo 2 | 7 clases
Proyecto del curso
expand_more-
play_circle_outline
Clase 1
Estructura del proyecto
-
play_circle_outline
Clase 2
Urls
-
play_circle_outline
Clase 3
Manejo de archivos estáticos
-
play_circle_outline
Clase 4
Errores y manejo
-
play_circle_outline
Clase 5
Archivos de configuraciones
-
play_circle_outline
Clase 6
Integración con Bootstrap
-
play_circle_outline
Clase 7
Layout Principal
-
-
Módulo 3 | 7 clases
Formularios
expand_more-
play_circle_outline
Clase 1
Crear formulario
-
play_circle_outline
Clase 2
Pintar formulario
-
play_circle_outline
Clase 3
Macros
-
play_circle_outline
Clase 4
Macros en Jinja2
-
play_circle_outline
Clase 5
Obtener valores del formulario
-
play_circle_outline
Clase 6
CSRF
-
play_circle_outline
Clase 7
Validaciones
-
-
Módulo 4 | 6 clases
Modelos
expand_more-
play_circle_outline
Clase 1
Conexión con la base de datos
-
play_circle_outline
Clase 2
Crear tabla de usuarios
-
play_circle_outline
Clase 3
Formulario para crear usuarios
-
play_circle_outline
Clase 4
Registrar usuario
-
play_circle_outline
Clase 5
Mensaje flashed
-
play_circle_outline
Clase 6
Generar contraseña
-
-
Módulo 5 | 4 clases
Validaciones
expand_more -
Módulo 6 | 7 clases
Autenticación de usuarios
expand_more-
play_circle_outline
Clase 1
Obtener (buscar) usuario
-
play_circle_outline
Clase 2
Generar sesión
-
play_circle_outline
Clase 3
Mensajes por categorías
-
play_circle_outline
Clase 4
Cerrar sesión
-
play_circle_outline
Clase 5
Login requerido
-
play_circle_outline
Clase 6
Obtener al usuario actual
-
play_circle_outline
Clase 7
Archivo de constantes
-
-
Módulo 7 | 10 clases
CRUD - Crear, Leer, Actualizar y Eliminar
expand_more-
play_circle_outline
Clase 1
Modelo de tareas
-
play_circle_outline
Clase 2
Formulario para crear tareas
-
play_circle_outline
Clase 3
Crear tareas
-
play_circle_outline
Clase 4
Listar tareas
-
play_circle_outline
Clase 5
Editar estructura de la tabla
-
play_circle_outline
Clase 6
Editar tarea
-
play_circle_outline
Clase 7
Eliminar tarea
-
play_circle_outline
Clase 8
Paginación
-
play_circle_outline
Clase 9
Mostrar tarea
-
play_circle_outline
Clase 10
Clase active
-
-
Módulo 8 | 3 clases
Servidor de correos
expand_more