Bloquez le spam des formulaires sans pister vos visiteurs
DevTcha est une protection anti-robot par preuve de travail qui tourne sur votre propre serveur. Pas de cookie, pas de requête vers un tiers, rien à cliquer ni à déchiffrer : le navigateur fait un petit calcul en arrière-plan, et les robots paient chaque envoi.
npm install devtcha
Pourquoi DevTcha
Une alternative légère à reCAPTCHA et hCaptcha pour les formulaires de contact, d'inscription et de commentaires.
Sans cookie ni tiers
Défis et vérifications restent entre vos visiteurs et votre serveur. Aucun prestataire externe à déclarer.
Rien à résoudre
Pas d'image, pas de case à cocher. Le calcul démarre à l'affichage du formulaire et se termine en général avant qu'il soit rempli.
Accessible
Un message role="status" annonce chaque état aux lecteurs d'écran. Les textes se traduisent par des attributs.
Quatre langages serveur
Node.js (TypeScript), PHP, Python et Go, tous contrôlés par les mêmes vecteurs de test.
Léger, sans dépendance
Le script navigateur pèse 5,7 Ko minifié. Chaque serveur n'utilise que sa bibliothèque standard.
Jetons à usage unique
Défis signés, date d'expiration, protection contre le rejeu avec une mémoire remplaçable (mémoire, fichiers, Redis, SQL).
Principe
Le serveur délivre un défi signé ; le navigateur retrouve le nombre secret par force brute ; le serveur contrôle la réponse une seule fois.
Démo en direct
Le vrai widget <dev-tcha>, dans cette page. Envoyez le formulaire, puis essayez de rejouer le même jeton.
Côté serveur (simulé dans la page)
Pour fonctionner sans serveur, cette démo crée et vérifie les défis dans la page, avec un secret stocké dans le navigateur. Elle montre le fonctionnement, elle ne protège rien. En production, ces deux étapes restent sur votre serveur.
Mesuré sur un portable de 2021 (Ryzen 7 5700U, Chromium, difficulté par défaut) : 637 ms par défi en médiane, 1,3 s pour parcourir toute la plage (pire cas). Non mesuré sur téléphone, où c'est probablement plus lent.
Ce que voient les visiteurs




Intégration
Deux appels côté serveur et un élément HTML. npm install devtcha
<script src="/devtcha.js" defer></script>
<form method="post" action="/contact">
<textarea name="message" required></textarea>
<dev-tcha challengeurl="/api/devtcha"></dev-tcha>
<button type="submit">Send</button>
</form>Sans outil de construction, servez dist/devtcha.js depuis votre propre domaine. Avec Vite, webpack ou Next.js : import "devtcha/client".
import { createChallenge, verifySolution } from 'devtcha/server';
const secret = process.env.DEVTCHA_SECRET; // 32+ random characters
// GET /api/devtcha (Cache-Control: no-store)
res.json(createChallenge({ secret }));
// POST /contact
const result = await verifySolution(req.body.devtcha, { secret });
if (result !== 'ok') return res.status(400).end(); // invalid, expired, reusedrequire 'devtcha.php';
// GET /api/devtcha
header('Content-Type: application/json');
header('Cache-Control: no-store');
echo json_encode(devtcha_create_challenge($secret));
// POST /contact
$result = devtcha_verify($_POST['devtcha'] ?? null, $secret);
if ($result !== 'ok') { http_response_code(400); exit; }La version PHP est fournie avec le paquet npm (node_modules/devtcha/php/devtcha.php) : un seul fichier, PHP 7.4 ou plus récent, extensions standard uniquement.
FAQ
Arrête-t-il tous les robots ?
Non. Il rend les envois en masse coûteux, mais un robot qui exécute JavaScript passera après avoir payé le calcul. Combinez-le avec une limitation de débit et un champ piège.
Faut-il une bannière de cookies ?
DevTcha ne dépose aucun cookie, n'utilise aucun stockage du navigateur et ne contacte aucun tiers : il n'ajoute aucune raison d'afficher une bannière de consentement.
Fonctionne-t-il sans JavaScript ?
Non : sans JavaScript, aucun jeton n'est calculé et le serveur refuse le formulaire. Ajoutez un message <noscript> et proposez un autre moyen de contact.
Est-ce un service hébergé ?
Non. C'est une bibliothèque : chaque site délivre ses propres défis et vérifie ses propres jetons.