Todos los artículos
SecurityClients

Cómo los enlaces mágicos de WordPress se protegen con HMAC

e
erdincbulat
August 26, 2026
8 min de lectura
Erdo Client Preview

En resumen: un enlace mágico de WordPress es un token largo y aleatorio cuyo hash HMAC-SHA256 —no el token en sí— se guarda en tu base de datos. Cualquiera con el enlace entra sin contraseña; quien robe tu base de datos obtiene un hash que no puede convertir de nuevo en un enlace funcional. Ese es todo el modelo de seguridad en una frase, y el resto de este artículo explica por qué funciona.

El problema de compartir acceso a la manera antigua

Si alguna vez le diste a un cliente una URL de staging o una contraseña de página compartida, ya conoces los puntos débiles:

  • Una contraseña compartida es idéntica para todos. No puedes saber quién la compartió más allá, y revocarla expulsa a todos los visitantes a la vez, incluido el cliente que está a mitad de la revisión.
  • Las URL de staging acaban indexadas. Olvida una cabecera noindex y Google la encuentra. "No listada" no es lo mismo que "privada".
  • Ninguna de las dos caduca por sí sola. Seis meses después, el enlace que un antiguo probador de staging de un cliente guardó en su historial del navegador sigue funcionando.

Nada de esto es un problema de fortaleza de contraseña. Son problemas de identidad: el sistema no tiene forma de saber quién está usando la credencial, solo que la credencial era correcta.

Qué es realmente un enlace mágico

Un enlace mágico cambia "demuestra que conoces un secreto que todos conocen" por "demuestra que tienes un token que nadie más tiene". En Erdo Client Preview, ese token es una cadena aleatoria criptográfica —lo bastante larga como para que adivinarla sea inviable en la práctica—, generada por persona y por propósito, con su propia etiqueta, caducidad y contador de uso.

Un punto crucial: el token en bruto solo se te muestra una vez, al crearlo, dentro de la URL que copias y envías. Nunca se escribe en la base de datos en una forma que se pueda volver a leer.

Por qué HMAC en lugar de simplemente guardar el token

Aquí está la parte que la mayoría de las explicaciones de "enlace mágico" se saltan. Guardar el token en bruto en la base de datos —incluso en una columna que nadie mira— crea el mismo riesgo que guardar contraseñas en texto plano: una inyección SQL o una copia de seguridad de la base de datos filtrada, y cada enlace activo pasa a ser utilizable por un atacante.

La solución es HMAC (Hash-based Message Authentication Code), definido en el RFC 2104 e integrado en la función hash_hmac() de PHP desde PHP 5. HMAC combina un mensaje (el token) con una clave secreta (única para tu instalación de WordPress) para producir una firma: en este caso, HMAC-SHA256.

Lo que eso te da:

  1. La base de datos solo contiene el hash. Una tabla wp_options volcada o una copia de seguridad filtrada le da a un atacante un resumen HMAC-SHA256 de un solo sentido, no un enlace utilizable.
  2. El hash no se puede reutilizar para falsificar otro token. Como calcular un HMAC coincidente requiere la clave secreta, un atacante no puede retroceder desde un hash hasta un token válido, ni enviar un token arbitrario y lograr que se acepte sin conocer la clave.
  3. La verificación es un simple recálculo. Cuando un visitante abre un enlace, el plugin recalcula el HMAC del token presentado y lo compara con el hash guardado. Si coinciden, el enlace es genuino; si no, se deniega el acceso.

La idea clave: HMAC convierte "¿el visitante presentó la cadena correcta?" en "¿el visitante presentó una cadena que solo el servidor —y solo él, con su clave secreta— pudo haber firmado originalmente?". Es una garantía notablemente más fuerte que una comparación en texto plano.

Paso a paso: de la generación al acceso

  1. Haces clic en "Generar enlace mágico" en el panel de WordPress. El plugin genera un token aleatorio y calcula de inmediato su hash HMAC-SHA256 usando un secreto único para tu sitio.
  2. Solo se guarda el hash en la base de datos, junto con metadatos: una etiqueta, una caducidad opcional, una redirección opcional y un contador de uso. El token en bruto queda incrustado en la URL y no se guarda en ningún otro sitio.
  3. Copias la URL y se la envías a quien necesite acceso: un cliente, una parte interesada, un revisor.
  4. Esa persona abre el enlace. El plugin extrae el token de la URL, recalcula su HMAC y lo compara con el hash guardado.
  5. Si coincide, el plugin establece una cookie firmada y HttpOnly, para que el visitante pueda navegar por todo el sitio en vivo sin volver a hacer clic en el enlace en cada página. Si no coincide o el enlace ha caducado, solo ve la página de mantenimiento o "próximamente" bloqueada.
  6. Puedes revocarlo cuando quieras, invalidando al instante ese único enlace sin tocar ningún otro enlace activo.

Enlaces mágicos frente a las alternativas

Enfoque Acceso por persona Resiste una filtración de BD Revocación individual Esfuerzo de configuración
Contraseña de página compartida No — una contraseña para todos No — equivalente a texto plano, un restablecimiento bloquea a todos No Bajo
URL de staging no listada No — una URL para todos N/A — no hay autenticación No (hay que cambiar la URL) Bajo
Enlace mágico (verificado con HMAC) Sí — un token por persona Sí — solo se guarda un hash Sí — por enlace Bajo (lo gestiona el plugin)

Si lo que quieres comparar es específicamente con la protección por contraseña integrada de WordPress, hemos tratado esa comparación con más detalle en Páginas protegidas con contraseña frente a enlaces de vista previa seguros.

Por qué esto importa más de lo que parece en el trabajo con clientes

Las agencias y freelancers no necesitan simplemente algún control de acceso: necesitan saber quién miró qué, cuándo deja de funcionar, y que retirarle el acceso a un cliente nunca afecte al de otro. Una credencial por persona, revocable individualmente y con caducidad individual, es el único modelo que ofrece las tres cosas. Una contraseña compartida no ofrece ninguna.

Esto también explica por qué los enlaces mágicos combinan de forma natural con funciones como los comentarios de visitantes y las anotaciones en vivo a nivel de elemento: en cuanto sabes qué token abrió el sitio, sabes también de qué cliente es tal anotación, sin pedirle antes que se cree una cuenta.

Compruébalo en el código, no solo en este artículo

Erdo Client Preview es de código abierto, así que nada de lo anterior hay que tomárselo solo de palabra. La generación de tokens y la verificación HMAC viven en el repositorio de GitHub del plugin: lee el código fuente, abre un issue o envía un pull request si ves algo que se pueda mejorar.

Para terminar

Un enlace mágico es tan fiable como lo que le pase al token después de generarlo. Guardarlo en texto plano convierte tu base de datos en una lista de credenciales utilizables; guardarlo como un hash HMAC-SHA256 convierte una filtración en una lista de resúmenes inútiles sin la clave secreta que los produjo. Un pequeño detalle de implementación con un efecto desproporcionado en lo que realmente te costaría, en el peor de los casos, una brecha en la base de datos.

Instala Erdo Client Preview gratis desde WordPress.org y genera tu primer enlace mágico en menos de un minuto.

Plugin gratuito de WordPress

Erdo Client Preview

Enlaces mágicos, anotaciones en vivo y comentarios de visitantes — revisiones de clientes sin el ida y vuelta de correos.

Preguntas frecuentes

Más artículos

SecurityCompliance

Vulnerabilidades Más Comunes de WordPress y Cómo Solucionarlas

9 min de lectura
SecurityCompliance

Checklist de Endurecimiento de Seguridad de WordPress para 2026

10 min de lectura