Si tu web lleva Contact Form 7, la respuesta honesta es esta: el plugin en sí casi nunca es el agujero. El agujero suele estar en lo que le has añadido encima (adjuntos, complementos de terceros) y en cómo sale el correo desde tu web. En este artículo vas a comprobar tu versión y la de sus extensiones, revisar los formularios que suben archivos, cortar el spam que te envenena el dominio, saber qué datos de tus clientes se quedan guardados sin que lo sepas y dejarlo todo razonablemente seguro en una tarde. Y al final te digo cuándo compensa cambiar de plugin y cuándo es tirar el tiempo.
Qué hace realmente Contact Form 7 y por qué aparece en tantos avisos
Contact Form 7 es uno de los plugins más instalados de WordPress, y eso lo explica casi todo. Hace una cosa y la hace de forma minimalista: genera formularios y envía su contenido por correo. Por diseño, de fábrica no guarda los mensajes, no lleva protección antispam y no valida gran cosa en las subidas de archivos. No es un descuido, es su filosofía: núcleo pequeño y todo lo demás en extensiones.
Que aparezca en tantos boletines de seguridad tiene dos motivos. El primero es puramente estadístico: cuando algo está en millones de webs, cualquier fallo afecta a mucha gente y sale en todas partes. El segundo es más importante para ti: la mayoría de los sustos serios no vienen del plugin base, sino de sus complementos y de configuraciones descuidadas. Conviene separar mentalmente las dos cosas desde el principio, porque se arreglan de forma distinta.
Cómo comprobar tu versión y la de los complementos que le añadiste
Empieza por lo obvio. Entra en el panel, ve a Plugins > Plugins instalados y localiza Contact Form 7. Ahí ves la versión que tienes y si hay una actualización pendiente. Si estás varias versiones por detrás, actualízalo; es el paso que más riesgo quita con menos trabajo. Si te da miedo tocar por si algo se rompe, mira primero cómo actualizar plugins de WordPress sin romper la web.
Ahora la parte que casi nadie revisa: los complementos. Contact Form 7 tiene un ecosistema de extensiones que se instalan como plugins aparte: Flamingo (guarda mensajes), CF7 to Database, versiones multipaso, arrastrar y soltar, integraciones con hojas de cálculo, etc. En la lista de plugins búscalos por el nombre Contact Form 7 o por «CF7». Cada uno se actualiza por su cuenta y cada uno amplía la superficie de ataque.
Dos comprobaciones rápidas sobre esas extensiones: que estén al día y que vengan de un sitio de confianza (el repositorio oficial de WordPress.org o el autor original). Un complemento descargado de un foro cualquiera es exactamente el tipo de puerta trasera que buscamos evitar. Si tienes dudas sobre cómo se lee la lista completa de lo que corre en tu WordPress, tienes el mapa en la guía sobre vulnerabilidades de plugins de WordPress.
Formularios con subida de archivos: el riesgo que casi nadie revisa
Si tu formulario deja adjuntar archivos (un campo de CV, una foto, un presupuesto), aquí es donde de verdad te la juegas. El peligro es sencillo de explicar: alguien intenta subir un archivo .php disfrazado y, si el servidor lo ejecuta, acaba de conseguir ejecutar código en tu web.
Para comprobar si tienes esto, abre Contacto > Formularios de contacto, entra en cada formulario y busca en la plantilla una etiqueta [file] o [mfile]. Si no aparece ninguna, tu formulario no sube nada y este riesgo no te afecta. Si aparece, haz tres cosas:
- Limita las extensiones permitidas en la propia etiqueta, por ejemplo
[file tu-cv limit:5mb filetypes:pdf|doc|docx]. Nunca dejes que se cuele un ejecutable. - Impide que se ejecute PHP en la carpeta de subidas. Contact Form 7 guarda los adjuntos temporalmente en
wp-content/uploads/wpcf7_uploads. Añade en tu hosting una regla que bloquee la ejecución de PHP dentro deuploads; muchos paneles y plugins de seguridad ya lo permiten con un clic. - Comprueba que la carpeta no queda accesible al público. Debería tener un
index.htmlvacío y estar protegida.
Si necesitas subidas grandes o revisar el contenido antes de aceptarlo, casi siempre es mejor un plugin de formularios pensado para eso, con validación en el servidor, que forzar a Contact Form 7 a hacer algo para lo que no está diseñado.
Spam, envíos automatizados y correos que salen desde tu web
De fábrica, Contact Form 7 no trae ni captcha ni honeypot. Un bot puede rellenar tu formulario mil veces al día, y cada envío hace que tu web mande un correo. El resultado no es solo tu bandeja llena de basura: si tu web dispara cientos de correos automáticos, tu proveedor puede acabar marcando tu dominio y tus mensajes legítimos empiezan a caer en la carpeta de spam de tus clientes.
Dos medidas que cortan la mayoría del problema:
- Añade una barrera antibots. Cloudflare Turnstile o reCAPTCHA v3 se integran con Contact Form 7 sin fricción para el usuario, y un honeypot (un campo oculto que solo rellenan los bots) es gratis y sorprendentemente eficaz.
- Envía el correo autenticado. Configura un plugin SMTP para que los mensajes salgan por un servidor de correo real y no por la función
mail()de PHP. Y asegúrate de que el dominio tiene bien puestos SPF y DKIM; si esto te suena a chino, tienes explicado qué son SPF y DKIM sin necesidad de ser técnico.
Qué datos de clientes se quedan guardados sin que lo sepas
Aquí hay un malentendido muy extendido. Contact Form 7 por sí solo no guarda los mensajes en ningún sitio: los envía por correo y se olvida. Pero muchísimas webs tienen instalado Flamingo, el complemento oficial que sí almacena cada envío en la base de datos. Si lo tienes (mira si aparece un menú Flamingo en el panel), llevas meses o años acumulando nombres, correos, teléfonos y mensajes de gente que te escribió una vez.
Eso tiene dos consecuencias. La primera es de seguridad: si un atacante entra en tu administración, se lleva ese histórico entero. La segunda es legal: son datos personales y tienes que poder justificar cuánto tiempo los conservas y con qué base. Decide una política razonable (por ejemplo, borrar contactos que nunca llegaron a nada pasado cierto tiempo) y cumple lo que exige un formulario de contacto conforme al RGPD: información previa, casilla cuando toque y prueba del consentimiento.
Cómo dejar el formulario razonablemente seguro en treinta minutos
Con lo anterior en la cabeza, esta es la lista que puedes hacer de una sentada:
- Actualiza Contact Form 7 y todas sus extensiones a la última versión.
- Añade Turnstile, reCAPTCHA v3 o al menos un honeypot.
- Revisa si hay campos de subida de archivos: limita extensiones y tamaño, o quítalos si no los usas de verdad.
- Bloquea la ejecución de PHP en la carpeta
uploads. - Configura SMTP autenticado y comprueba SPF y DKIM.
- Mira si Flamingo guarda mensajes y decide cuánto tiempo los conservas.
- Añade la casilla y el texto legal, y enlaza tu política de privacidad.
- Limita quién puede editar formularios: no todo el equipo necesita permisos de administrador.
Nada de esto requiere tocar código más allá de una etiqueta del formulario. Es configuración, y en media hora dejas cerrado el 90% de lo que suele explotarse.
Cuándo compensa cambiar de plugin de formularios
Seré claro: para un formulario de contacto sencillo, Contact Form 7 bien configurado es gratis, ligero y suficiente. No cambies por moda. La migración tiene coste real: rehaces los formularios, revisas cada integración y pruebas que todo llega.
Sí compensa plantearse WPForms, Fluent Forms o Forminator cuando tienes una necesidad concreta que Contact Form 7 no cubre bien: lógica condicional, pasos con pagos, almacenamiento con exportación cómoda, o simplemente que quien mantiene la web no sabe editar plantillas de texto y necesita un editor visual. Ahí el cambio se paga solo en tiempo y en menos errores. Fuera de esos casos, la energía rinde más en configurar bien lo que ya tienes que en migrar.
Si quieres salir de dudas sin desmontar nada, lanza el análisis gratuito y comprueba con PathScan qué expone tu WordPress desde fuera: verás si tu formulario, tus plugins o tu correo están dejando alguna puerta abierta que desde el panel no se aprecia.
Seguir leyendo en esta sección
- Duplicator y All-in-One WP Migration: las copias que te dejas en el servidor
- WP File Manager: por qué es el plugin que más webs ha tumbado y qué hacer si lo tienes
- ¿Es vulnerable mi WooCommerce? Cómo comprobarlo y qué revisar en la tienda
- WPBakery viene con mi tema y no puedo actualizarlo: qué hacer
- Elementor y sus complementos: cómo saber si tienes una versión vulnerable
- LiteSpeed Cache: cómo saber si tu versión es vulnerable y qué revisar después
Ver todo en Avisos de plugins concretos → · Mapa completo del sitio