Défi HMAC côté serveur, calcul dans les Web Workers
ALTCHA est un CAPTCHA à héberger soi-même, en deux morceaux sous licence MIT : un widget <altcha-widget> en Web Component et des bibliothèques serveur. Le serveur signe un défi par HMAC. Le navigateur cherche ensuite, dans des Web Workers, le compteur dont la clé dérivée commence par le préfixe demandé, et le serveur vérifie la solution avant d'accepter le formulaire. La version open source ne passe par aucun service tiers.
Cap et mCaptcha calculent eux aussi leur preuve de travail dans le navigateur. mCaptcha est cependant un serveur à part, sous AGPL-3.0, alors qu'ALTCHA s'intègre au backend existant comme une bibliothèque.
Le comparatif des CAPTCHA hébergés chez soi met ALTCHA face aux autres outils sur ce que la preuve de travail arrête et ce qu'elle laisse passer.
Onze langages serveur et un widget de 34 ko
- 34 ko compressés, 52 ko avec toutes les traductions, contre plus de 300 ko pour reCAPTCHA selon le README.
- Argon2id et scrypt en option : ces algorithmes gourmands en mémoire, retenus pour gêner les GPU et les ASIC, s'ajoutent en workers séparés à PBKDF2 et SHA, inclus par défaut.
- Accessibilité annoncée WCAG 2.2 AA : navigation au clavier, libellés pour lecteur d'écran, plus de 50 langues.
- Onze langages côté serveur, tous sous MIT, dont PHP, Go, Python, Java, Rust et .NET. En JavaScript,
altcha-liba des plugins pour Express, Fastify, Hono, NestJS, Next.js, Nuxt et SvelteKit. - Adresses e-mail cachées aux scrapers : un plugin chiffre une donnée que le widget ne déchiffre qu'une fois le défi résolu.
Anti-rejeu à prévoir, défis ajustés au risque sur offre payante
Le serveur porte la vérification et l'anti-rejeu. Il génère un défi neuf à usage unique pour chaque interaction, puis vérifie la preuve reçue. Les plugins de altcha-lib fournissent pour cela un CappedMap, un store en mémoire de taille limitée. Avec plusieurs instances, la documentation demande un store central comme Redis, doté d'un setIfAbsent atomique : sans lui, deux envois simultanés du même défi peuvent passer tous les deux.
La version open source applique la même vérification à tout le monde. La page de comparaison du projet réserve aux offres payantes les défis ajustés au risque, le renseignement sur les menaces et le tableau de bord. Sentinel, le serveur payant auto-hébergé, y ajoute notamment l'analyse des signaux d'interaction, que le widget collecte par défaut, et un classifieur de spam. Le défi de secours, un code à recopier depuis une image ou un enregistrement audio, exige Sentinel ou une implémentation serveur maison.
Sentinel dès 99 € par mois, le cloud dès 47 €. La formule Professional couvre jusqu'à trois instances. Sans clé, Sentinel tourne en essai de 30 jours et la production exige une licence ; il n'est pas sous MIT, et seuls ses scripts et charts de déploiement sont publiés sur GitHub. Le Cloud, hébergé dans l'UE, inclut 1 000 requêtes par jour et trois sites. Le plugin WordPress gratuit couvre la connexion, l'inscription et les commentaires ; Contact Form 7 ou WooCommerce demandent l'offre à 18,90 € par mois.
Sans cookie par défaut seulement. Le widget envoie sa preuve dans un champ caché, mais le serveur peut lui imposer un cookie par l'en-tête X-Altcha-Config.
La conformité WCAG est affirmée par l'éditeur. Sa page de conformité ne cite aucun audit externe du widget et laisse la responsabilité finale à l'intégrateur.
Des failles de vérification corrigées en octobre 2026. La v3.0.0 du 7 avril 2026 a réécrit le widget et sa preuve de travail, et 16 versions ont suivi jusqu'à la v3.3.0 du 5 octobre. Celle-ci corrige un contournement de verifySolution dans altcha/lib : sans signature de clé, n'importe quel compteur était accepté sans calcul. Le même jour, altcha-lib 2.6.0 a corrigé un autre contournement et deux failles d'anti-rejeu ; la bibliothèque Go avait retiré ses versions 2.0.0 à 2.3.0 le 3 octobre.
