Formularios de contacto de WordPress: una lista de verificación de seguridad
Contact Form 7, WPForms, Gravity Forms, Ninja Forms o Fluent Forms: el plugin importa menos que su configuración y mantenimiento. Esto es lo que debe revisar y volver a revisar después de cada actualización.
La mayoría de los sitios WordPress usa uno de unos pocos plugins de formularios: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms y algunos más. Cualquiera puede funcionar de forma segura o quedar completamente abierto. La diferencia rara vez está en el plugin en sí, sino en su configuración, los complementos que lo rodean, cómo sale el correo del servidor y qué ocurre con los mensajes después de que llegan.
- Mantenga actualizados el plugin de formularios y todos sus complementos, y elimine los que ya no usa.
- Active la protección antispam del propio plugin —campo trampa, integración de CAPTCHA o Akismet cuando corresponda— y confirme que realmente funcione.
- Envíe notificaciones mediante SMTP autenticado desde una dirección de su propio dominio.
- Restrinja los archivos por tipo y tamaño, y evite que los archivos cargados puedan listarse o explorarse públicamente.
- Mantenga la dirección de correo del destinatario fuera de la página y de su código fuente.
- Almacene únicamente las entradas que necesita y solo durante el tiempo que las necesite.
- Ejecute una verificación breve después de cada actualización de WordPress, del tema o de cualquier plugin.
Actualizaciones: el plugin de formularios y todo lo que lo rodea
Los plugins de formularios son objetivos populares porque aceptan entradas de cualquier persona en internet. Las correcciones de seguridad llegan como actualizaciones ordinarias, así que actualice pronto, y no solo el plugin principal. Los complementos de pagos, carga de archivos, conexiones con CRM, lógica condicional o proveedores adicionales de CAPTCHA son código independiente con sus propias vulnerabilidades. También lo son los plugins que instaló una vez para probarlos y olvidó. Desactivar no basta: los plugins desactivados siguen en el servidor y, en algunos casos, se puede acceder directamente a sus archivos. Si no lo usa, elimínelo.
Antispam: actívelo y después demuestre que funciona
La mayoría de los plugins de formularios tiene sus propias opciones antispam o se integra con servicios externos: un campo trampa que los bots llenan y las personas nunca ven, CAPTCHA como reCAPTCHA, hCaptcha o Cloudflare Turnstile, y Akismet, que compara el contenido del mensaje con una base de datos de spam. Las opciones varían según el plugin y la versión, así que revise la configuración en lugar de suponer. Los CAPTCHA externos cargan scripts de terceros y Akismet envía el contenido recibido a un servicio externo: ambos deben figurar en su política de privacidad y, según su configuración, en su gestión del consentimiento.
El problema más común es una protección activada que no funciona. Un CAPTCHA que usa claves públicas de prueba deja pasar todo. Un widget cuyo script está bloqueado por un plugin de caché u optimización, o por un error de JavaScript, no detiene nada. Un campo trampa sin los estilos que lo ocultan es leído por los lectores de pantalla y llenado por visitantes reales. Por eso, después de cualquier cambio, abra el formulario en una ventana privada, revise la consola del navegador y el código fuente de la página, y envíe un mensaje de prueba. Si quiere una protección que no dependa de Google, el plugin gratuito de formexposed para WordPress agrega un campo trampa, una verificación de tiempo y una prueba de trabajo, y vuelve a verificar el sitio después de actualizar plugins: una opción entre varias.
Correo: cómo se envía y adónde va
De forma predeterminada, WordPress entrega el correo a la función de correo PHP del servidor, y en muchos alojamientos esos mensajes tienen una autenticación deficiente y terminan en spam o desaparecen en silencio. En su lugar, envíe mediante un plugin SMTP o el servicio de correo de su proveedor de alojamiento, usando un buzón real con nombre de usuario y contraseña y una dirección remitente de su propio dominio, como una dirección forms@ dedicada. Los registros SPF, DKIM y DMARC del dominio deben cubrir ese remitente. No coloque la dirección del visitante en el campo From: no es su dominio, por lo que el mensaje no puede superar la alineación DMARC y, según la política del dominio del visitante, termina en spam o se rechaza. Colóquela en Reply-To y podrá seguir respondiendo con un clic.
La dirección del destinatario debe estar en la configuración del plugin, no en la página. Revise el código fuente de su página de contacto: un enlace mailto junto al formulario o un campo oculto que contiene la dirección del destinatario entrega esa dirección a todos los bots recolectores. En formularios antiguos o hechos a medida puede ser peor: si el servidor confía en un campo oculto de destinatario, cualquiera puede modificarlo y usar su formulario para enviar correo a direcciones arbitrarias.
Archivos cargados y entradas almacenadas
La carga de archivos es la función de formularios de mayor riesgo, así que primero pregúntese si realmente la necesita. Si la necesita, permita solo los tipos que espera recibir —por ejemplo, PDF y formatos de imagen habituales— en lugar de bloquear unos pocos tipos peligrosos, y establezca un límite de tamaño. Revise dónde almacena el plugin los archivos cargados: no deben poder listarse en un directorio público e, idealmente, ni siquiera debe ser posible acceder a ellos con una dirección que pueda adivinarse. Elimínelos una vez atendidos o envíelos como adjuntos en lugar de conservarlos en el servidor.
Muchos plugins de formularios o sus complementos guardan cada envío en la base de datos de WordPress, a menudo incluido el spam. Es un respaldo útil cuando falla el correo, pero también una acumulación creciente de datos personales. Conforme al principio de limitación del plazo de conservación del RGPD (Art. 5(1)(e)), esos datos no deben conservarse más tiempo del necesario. Decida si necesita entradas almacenadas, qué campos y durante cuánto tiempo; después use la opción de eliminación automática del plugin, si existe, o elimine regularmente las entradas antiguas. Las copias de seguridad de la base de datos contienen los mismos datos.
Después de cada actualización
- 1Abra la página de contacto en una ventana privada: el formulario y su elemento antispam se muestran correctamente y la consola del navegador no presenta errores.
- 2Vea el código fuente de la página: el campo trampa y el script de CAPTCHA siguen presentes, y la dirección del destinatario no.
- 3Envíe un mensaje de prueba: llega a la bandeja de entrada, no a spam, y los encabezados muestran que SPF, DKIM y DMARC superan las verificaciones.
- 4Revise las opciones importantes: destinatario, dirección remitente, tipos y tamaños de archivos permitidos y tiempo de conservación de las entradas.
- 5Compruebe que el enlace a la política de privacidad y cualquier texto de consentimiento sigan apareciendo junto al formulario.
- 6Anote la fecha y lo que revisó para saber cuándo se demostró por última vez que el formulario funcionaba.
Una vez que se vuelve una rutina, esto toma poco tiempo y detecta precisamente las fallas silenciosas que, de otro modo, pasarían desapercibidas durante semanas. Para una visión externa, una verificación gratuita en formexposed.com revisa las páginas públicas de formularios de un sitio sin enviar nada y muestra si la protección esperada está presente y configurada de forma eficaz, sin necesidad de una cuenta.