Diferencia entre captcha y token

En este artículo vamos a explicar la diferencia entre un captcha y un token, para qué sirven y cómo se implementan usando PHP. Cuando hablamos de seguridad en formularios web, dos conceptos aparecen constantemente: captcha y token. Aunque a veces se confunden o se usan indistintamente, no resuelven el mismo problema y no son intercambiables. Entender bien sus diferencias es clave para construir sistemas seguros y profesionales. Empecemos por definir qué es cada uno.

¿Qué es un captcha ?

Un captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) es un mecanismo diseñado para diferenciar humanos de bots. Su uso se centra en:

  • Evitar spam automático
  • Bloquear bots en formularios públicos
  • Reducir ataques por fuerza bruta
  • Proteger comentarios, registros, contactos, etc.

A diferencia de un token, un captcha protege contra automatización, no contra ataques de sesión ni suplantación.

Ejemplo de captcha en PHP

Podemos implementar un captcha de la siguiente manera en nuestro formulario HTML:

<form method="post">
    <label>¿Cuánto es 3 + 4?</label>
    <input type="text" name="captcha">
    <input type="submit">
</form>

En la parte PHP del servidor que recibe el formulario podemos verificar el captcha con el siguiente código:

session_start();

// CAPTCHA esperado
$_SESSION['captcha'] = 7;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if ((int)$_POST['captcha'] !== $_SESSION['captcha']) {
        die('CAPTCHA incorrecto');
    }

    echo 'Formulario enviado correctamente';
}

En producción se usan sistemas más robustos de captcha (Google reCAPTCHA, hCaptcha, etc.), pero el concepto es el mismo: la gran diferencia respecto al token es que el usuario debe demostrar que es humano.

¿Qué es un token?

Un token es un valor secreto y aleatorio, generado por el servidor, que se utiliza para verificar la autenticidad de una petición. El caso más habitual es el token CSRF (Cross-Site Request Forgery). El uso de tokens se centra en:

  • Evitar que un tercero envíe peticiones en nombre del usuario
  • Proteger acciones sensiblescomo cambiar contraseña, borrar datos, pagos…
  • Garantizar que la petición proviene del propio sitio

A diferencia de un captcha , un token protege contra falsificación de peticiones, no contra bots.

Ejemplo de token en PHP

Podemos implementar un token para garantizar que las peticiones de formulario provienen de nuestro sitio web (CSRF) al iniciar la sesión en PHP.

session_start();

if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

Una vez definido nuestro token lo añadimos a los formularios HTML de nuestra web:

<form method="post">
    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
    <input type="submit" value="Enviar">
</form>

Al recibir los formularios en nuestro servidor PHP, comprobamos que provienen de la sesión creada con nuestro token.

session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die('Token CSRF inválido');
    }

    echo 'Petición válida';
}

La diferencia fundamental respecto al captcha es que con este método el token no lo ve un atacante externo (dominio), es único por sesión y se valida siempre en el servidor garantizando su seguridad.

Características entre captcha y token

CaracterísticaCaptcha Token
Protege contra bots
Protege contra CSRF
Requiere interacción humana
Es secreto
Va ligado a la sesión
Uso típicoFormularios públicosAcciones autenticadas

Diferencia entre captcha y token

En este artículo hemos explicado la diferencia entre un captcha y un token con ejemplos en HTML y PHP. Usados correctamente, forman una base sólida de seguridad para cualquier aplicación PHP moderna y preparada para entornos reales. Un captcha y un token no hacen lo mismo ni se sustituyen entre sí:

  • El captcha verifica quién envía el formulario (humano vs bot).
  • El token verifica desde dónde y con qué sesión se envía la petición.

Resumiendo, hay una gran diferencia entre usar captcha o token: usa captcha cuando el formulario es público, quieres evitar spam o bots y hay riesgo de automatización. En cambio usa token CSRF cuando el usuario está logueado, la acción es sensible o hay sesión activa. Lo ideal es usar captcha + token, cada uno cumpliendo su función.

¡ Espero que este artículo sea de vuestro interés !

Deja un comentario