La plupart du trafic automatisé est facile à rejeter. Une vérification de user-agent et un test de fingerprint en arrêtent la grande majorité avant que le moindre comportement ne compte. Le trafic contre lequel il vaut la peine de concevoir, c'est cette petite fraction qui falsifie tout cela, et ce trafic doit encore faire une chose qu'il ne peut pas feindre facilement : bouger un curseur comme une personne.
Voici un regard sur cursor_v2, un détecteur neuronal compact qui note la façon dont une souris a réellement bougé. Il est assez petit, environ dix mille paramètres, pour s'exécuter sur chaque geste, et lors de nos tests il tient face à toutes les méthodes que nous connaissons pour synthétiser un curseur à l'allure humaine. Comme il s'agit d'un modèle de sécurité en production, cet article traite de résultats : ce qu'il attrape, le peu qu'il coûte, et où sont ses limites, en toute honnêteté. Il ne décrit pas les rouages internes de la décision.
La version courte :
- cursor_v2 transforme un seul mouvement de souris en un score humain/bot en moins d'une milliseconde, à partir d'un modèle de ~10 600 paramètres pesant ~0,12 Mo.
- Face à sept générateurs de curseur indépendants (géométriques, physiques, d'imitation humaine neuronale et trajectoires optimisées spécifiquement pour le déjouer), il signale 86 à 100% des mouvements de bots tout en signalant environ 0% des vrais humains.
- Sur un générateur avec lequel il n'a jamais été entraîné, il obtient un AUC de 0,999 contre 0,920 pour la génération précédente.
- Nous avons pointé un agent LLM sur un navigateur furtif (Camoufox), un navigateur qui déjoue la détection au niveau fingerprint, vers une boutique de test. cursor_v2 a signalé 100% de ses mouvements, même avec l'humanisation de mouvement activée.
L'adversaire contre lequel il vaut la peine de concevoir
La détection de bots est une pile de filtres, et l'essentiel du volume tombe dans les moins chers : un user-agent manifestement automatisé, un fingerprint de navigateur sans interface, une IP de centre de données. Les bots qui survivent à ces couches sont ceux que construisent des gens qui lisent les mêmes recherches que nous. Ils font tourner de vrais navigateurs, effacent les indices de fingerprint et passent par des réseaux résidentiels. Quand une telle session atteint une page, les signaux statiques paraissent propres.
Ce qui reste, c'est le comportement. Une vraie personne qui parcourt un site produit un flux continu d'entrées, et le mouvement humain du curseur est le produit d'une boucle de contrôle biologique bruitée, vraiment difficile à reproduire. Un fingerprint se copie à l'identique. Copier la façon dont une main bouge une souris, de manière convaincante et sur des milliers de gestes, est un problème distinct, et séparé. Un bot peut être parfait à la couche fingerprint et se trahir à l'instant où il bouge.
Un détecteur assez petit pour s'exécuter sur tous
cursor_v2 prend une trajectoire de curseur, les échantillons qu'un mouvement laisse en se déplaçant d'un point à un autre, et renvoie une seule probabilité que le mouvement ait été produit par une automatisation. Il est entièrement neuronal, exporté en ONNX, et s'exécute sur un CPU. Pas de GPU, pas d'appel de service, pas de serveur de modèle par requête.
La raison pour laquelle cela compte est économique. Un détecteur que vous ne pouvez vous permettre d'exécuter que sur les sessions suspectes est un détecteur sous lequel les attaquants apprennent à rester. Un détecteur qui coûte une fraction de milliseconde et un dixième de mégaoctet peut s'exécuter sur chaque mouvement de chaque session, exactement là où vit le signal comportemental.
L'empreinte déployée :
- Environ 10 600 paramètres au total.
- 0,74 ms par mouvement sur un seul thread CPU.
- ~0,12 Mo de poids de modèle.
- ~64 Mo de mémoire de pointe à l'inférence.
Avec cette empreinte, un seul cœur note de l'ordre de mille mouvements par seconde, assez bon marché pour rester toujours actif.
Chaque faux curseur a son voisinage
En interne, le modèle représente chaque mouvement comme un vecteur compact. Nous n'exposons pas ce qui entre dans cette représentation, mais nous pouvons montrer ce qui en sort. Projetez un large échantillon de mouvements en trois dimensions et une structure apparaît d'elle-même : le mouvement humain réel occupe une région, et chaque manière distincte de synthétiser un curseur tombe dans sa propre région, à l'écart des humains. Un humaniseur géométrique, un modèle physique de souris et un réseau neuronal entraîné à imiter les humains paraissent différents les uns des autres, et tous paraissent différents d'une personne.
Dans une projection interactive en 3-D de cet embedding de mouvement, les humains forment un seul voisinage tandis que chaque générateur de bots forme son propre nuage séparé, y compris le modèle neuronal entraîné directement sur du mouvement humain. Les axes de la projection sont arbitraires ; ce qui compte, c'est que les classes se séparent, pas la façon dont le modèle décide.
Le parcours des générateurs
La séparation dans une projection est suggestive, pas une preuve. La vraie question est ce que fait le modèle déployé quand on lui présente un mouvement qu'il n'a jamais vu. Nous avons donc construit un parcours : sept façons indépendantes de générer une trajectoire de curseur, notées de bout en bout par le modèle exact que nous déployons, face à un ensemble de contrôle de mouvements humains réels réservés.
Les familles se répartissent en trois groupes. Les familles réservées utilisent un générateur avec lequel le modèle n'a jamais été entraîné, le test équitable de généralisation. Les familles durcies sont celles que nous avons délibérément entraîné le modèle à résister, dont un corpus de trajectoires optimisées par recherche spécifiquement pour évader ce détecteur ; un taux de capture élevé là confirme que le durcissement a tenu. Et un plancher trivial de bon sens.
| Famille de générateur | Régime | n | AUC | Recall @ FPR ≤ 1% | Capturé @ déployé |
|---|---|---|---|---|---|
| Générateur non humanisé | plancher de bon sens | 500 | 0,995 | 98,6% | 98,2% |
| Humaniseur géométrique | réservée | 500 | 0,999 | 99,6% | 99,6% |
| Humaniseur quantifié | réservée | 500 | 0,999 | 99,6% | 99,6% |
| Modèle de mouvement physique | durcie | 499 | 1,000 | 99,4% | 97,0% |
| Imitation humaine neuronale | durcie | 500 | 1,000 | 100,0% | 100,0% |
| Trajectoires optimisées pour l'évasion | durcie | 500 | 0,999 | 97,6% | 85,6% |
| Corpus d'exploits adverses | durcie | 500 | 1,000 | 100,0% | 96,0% |
Contrôle : 160 mouvements humains réservés, notés par le même pipeline, avec un taux de faux positifs de 0,0% au seuil déployé et un score médian de 0,000. Chaque chiffre de bot ci-dessus est mesuré face à ce même contrôle.

Le point de donnée honnête : même le corpus construit en cherchant des trajectoires qui battent ce détecteur est signalé 85,6% du temps, alors que les vrais humains sont signalés à zéro. La pression adverse déplace le chiffre ; elle ne le casse pas.
Le même résultat vu comme une distribution de scores : humains et bots s'accumulent aux extrémités opposées de l'échelle, avec très peu entre les deux. La sortie humaine s'effondre près de zéro, les mouvements de bots regroupés de tous les générateurs s'effondrent près de un, et le seuil de décision se loge dans le vide qui les sépare.

Le vrai test : un navigateur furtif piloté par un agent
Un générateur de trajectoires est un sujet de laboratoire propre. Un navigateur furtif moderne piloté par un agent d'IA est l'adversaire réel, alors nous en avons fait tourner un. Nous avons construit un crawler piloté par LLM sur Camoufox, un navigateur furtif conçu spécifiquement pour déjouer la détection au niveau fingerprint, lui avons donné un objectif et l'avons laissé faire ses achats dans une boutique de test : trouver un produit, l'ajouter au panier, passer au paiement. À mesure qu'il naviguait, nous avons capturé ses vrais mouvements de souris et noté chacun avec le détecteur déployé.
| Agent Camoufox | Mouvements | Signalés comme bot | Session signalée |
|---|---|---|---|
| Mode par défaut | 6 | 6 (100%) | oui, après 3 mouvements |
| Humanisation de mouvement activée | 6 | 6 (100%) | oui, après 3 mouvements |
Chaque mouvement a été signalé, dans le mode par défaut de l'agent et avec son humanisation de mouvement intégrée explicitement activée. Le même noteur signale moins de 1% des vrais mouvements humains, donc ce n'est pas un détecteur qui se méfie simplement de tout.
Camoufox excelle dans ce pour quoi il est conçu, et il passerait très probablement sans encombre un contrôle reposant uniquement sur le fingerprint. Il a tout de même été attrapé, car la furtivité à la couche fingerprint n'achète pas la furtivité à la couche du mouvement. Les deux échouent de façon indépendante, et cette indépendance est tout l'intérêt d'exécuter la détection en profondeur. Pour en savoir plus sur le fonctionnement de ces outils, voyez les navigateurs furtifs et anti-détection expliqués et comment cside détecte les agents d'IA sur les navigateurs furtifs.
Généraliser au-delà de la distribution d'entraînement
Un chiffre mérite d'être mis en avant, car c'est celui qui est facile à truquer et facile à mal lire. Presque tout détecteur de curseur obtient environ 0,99 d'AUC sur le type de mouvement avec lequel il s'est entraîné ; ce chiffre est quasi dénué de sens. Le chiffre qui compte est le transfert, la performance sur un générateur entièrement réservé hors de l'entraînement.
Sur une famille d'humaniseurs avec laquelle aucun modèle ne s'est entraîné, cursor_v2 atteint un AUC de 0,999, tandis que le détecteur de génération précédente chute à 0,920 et perd l'essentiel de son recall. Le gain est dans la généralisation, pas dans le polissage au sein de la distribution.

Ce que nous pouvons prouver, et ce que nous ne pouvons pas
Un compte rendu de sécurité ne vaut la peine d'être lu que s'il est honnête sur ses limites, alors voici les nôtres.
La précision au sein de la distribution n'est pas la robustesse. Chaque chiffre sur un mouvement que le modèle a vu est quasi parfait et nous ne nous appuyons sur aucun. Les affirmations ici reposent sur des générateurs réservés et un test en direct avec navigateur furtif.
Le résultat entre générateurs est une estimation ponctuelle solide, pas une garantie universelle. Il est calibré sur un échantillon fini de vrais humains et une famille d'humaniseurs réservée. Lisez le 0,999 comme validé pour cette famille, pas pour chaque curseur qui existera jamais. Le levier ouvert honnête est l'ampleur du vrai mouvement humain contre lequel calibrer, plus que le modèle lui-même.
En production, nous appliquons un anti-rebond. Un seul geste étrange ne signale jamais une personne ; le noteur déployé attend plusieurs mouvements notés comme bot d'affilée avant d'agir. Les chiffres de cet article sont la vue par mouvement, plus dure, avant ce lissage.
Ce que cela signifie pour les équipes qui exécutent la détection
Retirez les détails et la leçon se généralise. Les bots qui comptent sont ceux qui ont déjà battu vos contrôles statiques, et la façon de les attraper est avec un signal qui échoue indépendamment de celui qu'ils battent. Le comportement, la façon dont une session bouge, clique et défile réellement, est ce signal, et c'est la couche pour laquelle les attaquants budgétisent le moins. Le même raisonnement parcourt attraper les bots qui ne veulent pas être attrapés et comment les agents OpenClaw contournent la détection de bots.
Le déblocage pratique est le coût. Un modèle comportemental assez petit et rapide pour s'exécuter sur chaque visiteur, pas seulement les suspects, supprime l'angle mort que crée l'échantillonnage. cursor_v2 est l'un de ces signaux : orthogonal au fingerprinting, assez bon marché pour rester toujours actif et, jusqu'ici, tenant face aux meilleurs falsificateurs de curseur que nous pouvons construire.
Comment cside s'intègre
cside vous donne une visibilité totale sur chaque script, requête et tiers qui touche votre site, ainsi que le signal comportemental pour distinguer les vrais utilisateurs de l'automatisation qui se cache parmi eux. Le modèle de curseur est une couche d'une pile de détection qui sépare déjà humains, bons bots et agents malveillants à la couche du navigateur, là où les indices statiques ont déjà été falsifiés.






