Ir al contenido

ALTCHA

WP-ImmoMakler es compatible con la protección antispam respetuosa con la privacidad ALTCHA. Se carga completamente desde su propio servidor de WordPress, sin conexión a terceros y sin cookies.

ALTCHA plantea al navegador de su visitante una tarea de cálculo automatizada (una denominada prueba de trabajo). El navegador la resuelve en segundo plano en cuanto se ha cargado la página, mientras su visitante rellena el formulario. Solo se muestra un pequeño campo que confirma que la comprobación se ha realizado correctamente:

El campo de ALTCHA en el formulario de contacto con la confirmación de verificación

Por tanto, sus visitantes no tienen que resolver ningún desafío ni hacer clic en nada. Para un bot de spam que envía formularios de forma masiva, en cambio, el esfuerzo de cálculo se acumula hasta convertirse en un obstáculo real.

A continuación, el servidor comprueba si la solución enviada corresponde a una tarea emitida por él mismo. Cada tarea es válida una sola vez y solo durante un tiempo limitado.

ALTCHA está activado de forma predeterminada: no tiene que configurar nada. Encontrará la selección en el backend de su sitio web (wp-admin) en WP-ImmoMakler → Ajustes → Protección antispam → Nivel 2: proveedores de CAPTCHA, por si desea elegir en su lugar otro proveedor o «Sin CAPTCHA (solo nivel 1)». No se requieren más ajustes ni ninguna cuenta externa, a diferencia de los CAPTCHAs alojados externamente, que requieren todos un sitekey y un secret key.

El ajuste se aplica a todos los formularios del plugin:

  • La tarea de cálculo la genera y la comprueba su propio servidor. No existe conexión con servidores de terceros.
  • No se establecen cookies.
  • No se recopilan datos de comportamiento de sus visitantes (movimientos del ratón, pulsaciones de teclas).
  • Lo único que se transmite es la solución de la tarea de cálculo: un valor numérico aleatorio junto con una suma de comprobación.

El aviso «Protegido por ALTCHA» dentro del campo es un simple enlace de texto a altcha.org. No carga ningún contenido desde ese sitio.

El navegador obtiene la tarea de cálculo a través de un endpoint de la API REST de WordPress:

GET /wp-json/immomakler/v1/altcha/challenge

La respuesta no se puede almacenar en caché de forma intencionada (Cache-Control: no-store), ya que cada tarea solo es válida una vez.

Procedimiento de cálculo y valores predeterminados

Sección titulada «Procedimiento de cálculo y valores predeterminados»

WP-ImmoMakler elige el procedimiento de cálculo según las posibilidades de su servidor:

  • Argon2id, si la extensión de PHP sodium está cargada, lo cual ocurre en casi todos los proveedores de hosting. Argon2id exige mucha memoria: cada paso de cálculo ocupa 64 MB de memoria. Para el navegador de su visitante esto es irrelevante, pero impide que un bot de spam recurra a tarjetas gráficas, que de otro modo resolverían miles de tareas simultáneamente.
  • PBKDF2/SHA-256 en caso contrario. No necesita ninguna extensión ni una cantidad de memoria destacable, pero se puede calcular considerablemente más rápido en tarjetas gráficas que en un navegador.

Ambos valores predeterminados corresponden a la recomendación de ALTCHA para el procedimiento respectivo:

ParámetroArgon2idPBKDF2/SHA-256Descripción
algorithmARGON2IDPBKDF2/SHA-256Procedimiento de cálculo de la tarea
Iteraciones (cost)15.000Esfuerzo por paso de cálculo
Memoria (memory_cost)65.536 KiB (64 MB)–Memoria por paso de cálculo
Pasos de cálculo (counter)100–2005.000–10.000Número de pasos hasta la solución
Validez30 minutos30 minutosDespués la tarea caduca
Uso múltipleno posibleno posibleCada tarea resuelta sirve para exactamente un envío

En un ordenador de escritorio, la tarea se resuelve con ambos procedimientos en aproximadamente dos a tres segundos; en un smartphone de gama media, en unos diez segundos. Como el cálculo comienza al cargar la página, en la práctica finaliza antes de que el formulario esté completamente rellenado. Un bot tiene que resolver la misma tarea de nuevo para cada envío y paga por tanto el mismo tiempo de cálculo por envío.

El núcleo de cálculo de Argon2id se carga como un archivo independiente desde el directorio del plugin (vendors/altcha/workers/argon2id.js). Si la memoria de su servidor es escasa y Argon2id no se puede calcular allí, WP-ImmoMakler emite automáticamente la tarea afectada con PBKDF2 y lo anota en el registro.

Si sigue recibiendo spam con ALTCHA activado, puede aumentar el esfuerzo de cálculo mediante un filtro. El filtro recibe los valores predeterminados del procedimiento que utiliza su servidor; el siguiente ejemplo duplica el esfuerzo para ambos. Tenga en cuenta que con ello también aumenta el tiempo de espera en dispositivos poco potentes.

add_filter( 'immomakler_altcha_challenge_options', function ( $options ) {
$options['counter_min'] *= 2;
$options['counter_max'] *= 2;
return $options;
} );

Aumente los pasos de cálculo (counter) y no las iteraciones (cost) ni la memoria (memory_cost): el esfuerzo para el navegador es en cualquier caso el producto de los valores, pero las iteraciones y la memoria determinan además cuánto tarda su servidor en generar y comprobar cada tarea.

Mediante el mismo filtro puede definir también el procedimiento. Esto es necesario cuando el núcleo de cálculo de Argon2id no se puede cargar en su instalación, por ejemplo, porque un plugin de optimización o una CDN entrega los archivos del directorio del plugin desde otro dominio:

add_filter( 'immomakler_altcha_challenge_options', function ( $options ) {
$options['algorithm'] = 'PBKDF2/SHA-256';
return $options;
} );

Si el filtro indica un procedimiento que su servidor no admite, el filtro se ignora por completo: sus pasos de cálculo serían muchas veces demasiado débiles o demasiado lentos para el otro procedimiento.

La protección antispam se integra en la validación del formulario de contacto mediante el siguiente filtro:

// Añadir su propia lógica de validación
add_filter( 'immomakler_contact_form_errors_in_send', function( $errors ) {
// $errors['mi_error'] = true;
return $errors;
} );

El mensaje de error que aparece cuando la comprobación falla se puede personalizar:

add_filter( 'immomakler_contactform_altcha_validationfailed', function ( $html ) {
return '<div class="alert alert-danger" role="alert">Vuelva a intentarlo, por favor.</div>';
} );