notabot

Browser passportPasseport navigateur

TypeP

Code···

Rendu canvas, tel que votre pile graphique l'a dessiné
Engine / Moteur
…
Version
…
System / Système
…
Languages / Langues
…
Time zone / Fuseau
…
Screen / Écran
…
Cores · memory / Cœurs · mémoire
…
Graphics / Graphisme
…
Print no. / Empreinte nº
…
Issued / Délivré
…

Votre navigateur va passer une frontière.

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.

  1. Papiers lus
  2. Recoupés
  3. Preuve de travail
  4. 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.

    Quel modèle

    Envoyée à ce seul fournisseur. Oubliée en quittant la page, sauf si vous cochez la case : elle est alors gardée sur cet appareil, chiffrée dans IndexedDB.

    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.

      Une balise script

      <form id="signup"> … </form>
      <script type="module"
        src="https://maxgfr.github.io/notabot/cdn/notabot.js"
        data-form="#signup"></script>

      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).

      Avec un Worker qui signe

      <notabot-check
        challenge-url="https://notabot.you.workers.dev/challenge"
        verify-url="https://notabot.you.workers.dev/verify">
      </notabot-check>
      
      POST /siteverify  secret=…&response=<token>
      → { "success": true, "verdict": "human", "score": 0.9 }

      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 navigateurs headless tels quels : webdriver, marques HeadlessChrome, GPU logiciel, plugins absents.
      • 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.

      Sources : Robot Visions · Broken Gates · Halligan · FP-Inconsistent

      Ce que ça ne sait pas faire