notabot lit ce que déclare votre navigateur, y cherche des contradictions et appose un tampon. Pas d'énigme sauf en cas de doute, et alors un simple curseur. Open source, front seul.
Papiers lus
Recoupés
Preuve de travail
Agent IA
Rien ne quitte cette page. L'avis de l'IA, plus bas, est facultatif et passe par votre propre modèle.
Tout ce que votre navigateur a dit à cette page
Lu sans une seule demande de permission, et rien n'a été envoyé. Chaque ligne dit ce qu'elle révèle et ce qu'elle dit de vous ; une mesure qui contredit le reste est marquée en rouge.
Lecture de votre navigateur…
Le rapport de l'inspecteur
Une réponse étrange ne prouve rien : de vraies personnes utilisent des VPN, de vieux ordinateurs et des extensions vie privée. Ce qui trahit un bot, ce sont des réponses qui se contredisent. Chaque règle ci-dessous a tourné sur votre navigateur.
Lancez la vérification en haut pour établir le rapport.
Signaux avancés, faits maison
Ce que les services d'empreinte vendent en plus de leurs bibliothèques open source, calculé ici à partir des mêmes relevés. Avec un serveur, ils sont scellés dans le jeton et remis à votre backend par /siteverify.
Simuler un robot
Modifiez une copie des signaux de votre propre navigateur comme ceux d'un robot se liraient, et voyez quelles règles le remarquent. Rien n'est envoyé : le score se calcule dans cette page.
Inspection secondaire : demandez à un agent IA
C'est le propos de la vidéo : tout captcha finit par envoyer les indices à un modèle qui vous note. Ici, vous choisissez le modèle et lisez exactement ce qu'il reçoit. Il ne voit que des nombres, des oui/non et des mots d'une liste fixe, jamais un texte que votre navigateur aurait pu écrire : un bot ne peut pas l'embobiner.
Ce que reçoit le modèle
Les instructions et les mesures exactes, avant tout envoi.
Apparaît une fois votre navigateur lu.
Ce qu'il a répondu
—
Les papiers qu'une page ne peut pas lire
Certains des indices les plus forts n'atteignent jamais JavaScript. Seul un serveur les voit : le middleware notabot les lit là où la plateforme les donne. Les horodatages renvoient à la vidéo.
IP et réseau
Un fournisseur d'accès ou un datacenter (AWS, OVH, Hetzner), et si sa localisation colle à votre fuseau horaire. [03:44]
Empreinte TCP
Le TTL, la taille de fenêtre et l'ordre des options du premier paquet SYN changent selon le système : un user agent Windows sur une pile Linux se trahit. [04:27]
Poignée de main TLS (JA4)
Suites et extensions diffèrent entre BoringSSL (Chrome), NSS (Firefox) et l'OpenSSL de Python. [05:01]
Réglages HTTP/2
Une seconde empreinte du client, sous celle de TLS. [05:55]
Comportement à grande échelle
Des milliers de sessions sur le même parcours, aux mêmes rythmes : invisible depuis un navigateur, flagrant depuis le serveur. [08:39]
Les agents qui signent
Les agents IA et les robots d'indexation peuvent signer leurs requêtes (Web Bot Auth) : le serveur vérifie la signature avec la clé publiée par l'opérateur et sait qui les envoie. [12:44]
Ce que le serveur ajouterait
Les règles que seul le middleware applique. Essayées ici sur les en-têtes que cette page peut connaître de votre navigateur (User-Agent, langues, client hints ; les en-têtes Accept et Sec-Fetch habituels supposés), et marquées « serveur uniquement » quand il leur faut ce qu'aucune page ne voit. notabot/middleware
Mettez-le sur votre site
Quatre façons, d'une ligne à un serveur qui vérifie chaque requête.
Ajoute la vérification au formulaire et retient l'envoi tant qu'elle n'est pas passée. Le jeton arrive dans un champ caché notabot-token.
Le paquet npm
npm install notabot
import { check, trackBehavior } from "notabot";
const behavior = trackBehavior();
const result = await check({ behavior });
result.verdict; // "human" | "unsure" | "bot"
result.rules.flags; // what tripped, and why
Chaque module a son point d'entrée : notabot/signals, /score, /behavior, /pow, /llm, /server, /widget.
Un middleware sur votre serveur
import { createNotabot, notabotExpress } from "notabot/middleware";
const notabot = createNotabot({ hmacKey: process.env.NOTABOT_HMAC_KEY });
app.post("/signup", notabotExpress(notabot), (req, res) => {
req.notabot.verdict; // token checked, bound, used once
});
Valide la requête elle-même (les en-têtes qu'un navigateur envoie toujours, client hints, bibliothèques HTTP, protocole, réseau) et le jeton : signé, lié à son navigateur et à son IP, à usage unique. Express, Hono ou tout serveur Fetch (Next.js, Bun, Workers).
Défis signés, signaux côté serveur, votre modèle avec votre clé, et un siteverify façon reCAPTCHA. examples/cloudflare-worker
Ce que ça attrape, ce que ça n'attrape pas
Aucun détecteur n'arrête tout le monde. Voici où se situe celui-ci, et pourquoi l'étape en plus est une friction, pas une preuve : des modèles gratuits, lancés en local, passent 92,6 % de vrais défis d'images reCAPTCHA.
Attrape
Les couches stealth injectées en JavaScript : les fonctions natives qu'elles remplacent, les iframes et workers neufs qu'elles oublient de retoucher.
Les clients HTTP scriptés : user agents qui se nomment, en-têtes de navigateur absents, poignée de main TLS qu'aucun navigateur ne fait (côté serveur).
Camoufox tel qu'il est aujourd'hui : une iframe neuve à l'Intl vide, une lecture audio qui échoue avec l'erreur privilégiée de Firefox. Camoufox
N'attrape pas seul
Les navigateurs modifiés à la source sans couture : il ne reste que les contradictions de leur empreinte générée.
Les agents IA qui pilotent un vrai navigateur sur un vrai GPU : leurs signaux sont ceux d'une personne. FP-Agent
Les fermes de résolution humaines, payées pour passer n'importe quel défi. Motoyama et al.
Pour ceux-là : les signaux du serveur (JA4, en-têtes, vélocité d'empreinte, un prix par tentative) et les agents qui signent leurs requêtes (Web Bot Auth). Notre propre benchmark montre l'écart : un Chrome avec fenêtre, drapeaux d'automatisation masqués, passe tous les contrôles d'ici.
Dans la page seule, un verdict peut être falsifié : un bot peut sauter le script ou rejouer un bon résultat. Pour bloquer, il faut la moitié serveur (le Worker), qui vérifie la preuve de travail et signe le jeton.
Les outils vie privée (Brave, la protection anti-empreinte de Firefox, les bloqueurs de canvas) changent certaines mesures. Ils comptent comme indices faibles, jamais comme verdict à eux seuls.
L'agent IA donne un second avis. Une règle décisive, comme navigator.webdriver, n'est jamais balayée par lui.
Le curseur et les cibles se jouent tous deux au clavier, et le comportement ne décide jamais seul sans pointeur. L'étape en plus est une friction pour les scripts ; proposez un autre chemin à qui en a besoin.