Repository navigation
1.6.0
La versión 1.6.0 parte de la 1.5.0 y reúne el nuevo protocolo seguro del desafío, el endurecimiento posterior, la renovación del conjunto visual y la internacionalización. La primera revisión de seguridad de 1.6.0 conservaba las 34 imágenes y mostraba 7 candidatas; el paquete final, manteniendo la versión 1.6.0, incorpora 40 imágenes y una cuadrícula de 9 candidatas.
Correcciones críticas de seguridad
- Eliminada la resolución trivial del CAPTCHA mediante correlación del texto de la pregunta con los atributos
alt, nombres de archivo y rutas visibles en el HTML. - Las imágenes se sirven mediante un endpoint opaco vinculado al desafío; el navegador no recibe nombres de objetos, categorías ni rutas originales.
- Cada desafío queda ligado a una sesión anónima HttpOnly, al contexto del formulario y, cuando corresponde, al ID de la entrada.
- El desafío se consume atómicamente en el primer intento, sea correcto o incorrecto, impidiendo reintentos, replay y ataques por enumeración.
- Sustituido el uso de
wp_hashpor HMAC-SHA-256 con secreto del servidor y comparación en tiempo constante, apropiado para el pequeño espacio de soluciones. - La solución correcta deja de almacenarse en texto plano dentro del transitorio.
- Añadidos límites independientes para generación, validación y descarga de imágenes del CAPTCHA.
- Añadido un techo global por IP que no se puede eludir rotando la cookie de sesión anónima.
- El límite de fallos de comentarios bloquea efectivamente nuevas solicitudes y responde con HTTP 429.
- Corregida la confianza en cabeceras de proxy: solo se aceptan cuando
REMOTE_ADDRpertenece a un CIDR de proxy configurado explícitamente. - La cadena
X-Forwarded-Forse resuelve de derecha a izquierda, evitando direcciones falsas antepuestas por el cliente. - Rechazados CIDR globales inseguros como
0.0.0.0/0y::/0. - Rechazadas las cadenas múltiples en cabeceras de proxy configuradas para contener una sola dirección.
- Separados los fallos de CAPTCHA en comentarios de los contadores de bloqueo del inicio de sesión.
- Bloqueados por defecto los comentarios anónimos por REST y XML-RPC cuando la protección de comentarios está activa, evitando el bypass del formulario web.
- Corregido el callback de error XML-RPC para que sea públicamente invocable por WordPress.
- Restringida a administradores con
manage_optionsla gestión y asignación de categorías CAPTCHA personalizadas. - Añadida validación del MIME real, firma, tamaño, dimensiones y total de píxeles antes de decodificar imágenes personalizadas.
- Excluido SVG como fuente del CAPTCHA; las imágenes personalizadas quedan limitadas a formatos ráster permitidos.
Imágenes y experiencia de uso
- Sustituido el conjunto anterior de 34 imágenes por 40 ilustraciones semirrealistas coherentes, 10 en cada categoría de animales, frutas, objetos y vehículos.
- Las 40 ilustraciones se generaron individualmente con un modelo generativo, tomando el estilo anterior como referencia.
- Normalizadas todas las imágenes a PNG opaco de 256 × 256 píxeles, sin texto, logotipos ni marcas de agua.
- Ampliado el desafío de 7 a 9 candidatas distintas en una cuadrícula 3 × 3.
- Conservada la secuencia ordenada de respuesta de 4 imágenes sin duplicados.
- La décima imagen de cada grupo introduce variación entre desafíos.
- Añadidas transformaciones por desafío cuando PHP GD está disponible.
- Añadida una mutación segura del flujo codificado como alternativa cuando PHP GD no está disponible.
- Añadido manejo mediante teclado, foco visible, indicador del orden seleccionado, botón de reinicio y mensajes accesibles mediante
aria-live. - Añadido límite de selección en el frontend para impedir más de cuatro elecciones.
Idiomas
- Adoptado el inglés como idioma fuente y de reserva del plugin.
- Añadidos catálogos completos para español, alemán y francés.
- Traducidos los 40 nombres de las imágenes predefinidas.
- Traducidas la pregunta, las instrucciones, la accesibilidad, los estados dinámicos de JavaScript, los errores y la página de ajustes.
- Añadida reserva por familia de idioma para variantes regionales sin catálogo exacto, como
es_MX,de_ATofr_CA. - Las categorías personalizadas conservan como etiquetas los títulos definidos por el propietario en la biblioteca de medios.
Mantenimiento y compatibilidad
- Conservadas las opciones existentes de la versión 1.5.0.
- Restablecidas al modo seguro las configuraciones antiguas de cabeceras IP hasta que el administrador configure los CIDR de sus proxies reales.
- Invalidados los desafíos pendientes de versiones anteriores durante la actualización.
- Añadida limpieza horaria de marcadores antirrepetición.
- Conservada la limpieza completa de opciones, transitorios y taxonomía al desinstalar.
- Conservados archivos
index.phpdefensivos en los directorios del plugin. - Añadidas pruebas unitarias y de integración para HMAC, replay, consumo atómico, límites, rotación de cookies, proxy spoofing, CIDR, imágenes, internacionalización, sintaxis PHP/JavaScript y arranque del plugin.
- Protegidos los scripts PHP de prueba para que solo se ejecuten mediante CLI/phpdbg y respondan con 403 por HTTP.
- Mantenida la compatibilidad mínima con WordPress 5.8 y PHP 7.4.