Aller au contenu
Antisy

Un contrôle anti-bot pour vos formulaires, sans énigme à résoudre.

Une balise dans la page, un appel depuis votre serveur, et un verdict : allow ou deny. Vous décidez de la suite.

Le bouton ouvre votre messagerie : un e-mail à support@antisy.com, l'objet déjà rempli.

Antisy SARL, société suisse en création. Accès sur liste d'attente ; hébergement en Suisse prévu, pas encore en service.

Une attaque, repoussée

Dans ce schéma : 19 tentatives, 5 laissées passer, 14 refusées.

  1. Le calme

    Quelques visiteurs envoient leur formulaire. Chaque envoi part avec son jeton, à usage unique ; votre serveur demande à Antisy, le verdict revient : allow.

  2. L’attaque

    Deux rangées d’automates envoient en rafale. Les envois arrivent en file serrée à la porte de votre site.

  3. Une question par envoi

    Pour chacun, votre serveur fait un seul appel à Antisy, avec le jeton reçu.

  4. Les verdicts tombent

    Un par un. deny pour l’envoi sans jeton (collecte du navigateur allumée), pour le jeton déjà utilisé, pour le rythme d’automate ; allow pour les visiteurs, au milieu de l’attaque.

  5. Cette attaque, repoussée

    Les envois refusés restent à la porte, le passage reste ouvert. Le verdict revient à votre serveur, jamais au navigateur. Vous décidez de la suite.

Intégration

Une balise, un formulaire, un appel.

Aucun JavaScript à écrire pour un formulaire ordinaire : le script d'Antisy remplit le champ du jeton à l'envoi.

  1. 01

    Une balise

    Dans le <head> de la page qui porte le formulaire. data-site est votre clé publique : aucun secret dans la page.

    HTMLvotre page
    <script src="https://api.antisy.com/v1/i/l.js"
            data-site="VOTRE_CLE_DE_SITE" defer></script>
  2. 02

    Un formulaire

    Le vôtre, tel quel, envoyé en POST vers votre site. À l'envoi, le script ajoute un champ caché, antisy-token, avec un jeton court à usage unique.

    HTMLrien à ajouter
    <form method="post" action="/contact">
      <input name="email" type="email">
      <button>Envoyer</button>
    </form>
  3. 03

    Un appel

    Depuis votre serveur, avec votre clé secrète. La réponse dit si le visiteur passe, sans en donner la raison.

    Nodevotre serveur
    const res = await fetch(
      "https://api.antisy.com/v1/siteverify",
      {
        method: "POST",
        redirect: "manual",                 // aucune redirection suivie
        signal: AbortSignal.timeout(3000),  // 3 s au plus
        body: new URLSearchParams({
          secret: process.env.ANTISY_SECRET,
          response: req.body["antisy-token"] ?? "",
        }),
      },
    ).catch(() => null);
    
    let verdict;
    if (res === null || res.status >= 500 || res.status === 429) {
      verdict = "allow"; // Antisy ne répond pas, ou 429 : l'envoi passe, journalisez-le
    } else if (res.status !== 200) {
      verdict = "deny";  // erreur de votre appel, à corriger
    } else {
      const result = await res.json().catch(() => null);
      verdict = result?.success === true ? "allow" : "deny";
    }
    // verdict : "allow" | "deny"

    PHP, Python, Go, curl, délai et panne : la documentation

Les règles qui ne changent pas
  • Deux issues, allow ou deny, sans en donner la raison. Un jeton invalide, forgé, rejoué ou expiré ne passe jamais ; un jeton absent non plus tant que la collecte du site est active. Le visiteur, lui, ne voit rien.
  • À quel point refuser se règle site par site, sur le tableau de bord :
    Strict
    Refuse plus tôt, au risque de gêner quelques vrais visiteurs.
    Équilibré
    Le réglage par défaut : un compromis entre les deux autres.
    Permissif
    Ne refuse que les cas nets, au risque de laisser passer davantage de robots.
  • Si Antisy ne répond pas en 3 secondes, laissez passer l'envoi et journalisez-le : une panne chez nous ne doit pas bloquer vos visiteurs.
  • La page doit être servie en HTTPS : sans contexte sécurisé, le navigateur ne produit pas de jeton.
  • Un envoi sans événement submit (par fetch ou form.submit()), ou vers une autre fenêtre, demande le jeton à antisy.token() : voir la documentation du script.
  • Connexion et inscription passent par un autre appel, assess, qui lie le jeton au compte. Son kit serveur Node sera publié sur npm ; il ne l'est pas encore.
  • L'API répondra sur api.antisy.com dès sa mise en service.

Données

Mesuré, gardé, effacé : écrit à l’avance.

Mesures du navigateurquelques minutes ; une partie, 30 jours si la conservation est allumée pour le site (éteinte par défaut)
Quelques minutes
Adresse IP, User-Agent, contexte de la requêteet le condensé de l’ordre des en-têtes HTTP
30 jours
Identifiant de connexion, issue de la tentativechiffré et condensé
90 jours
Le reste de l’enregistrementverdict et son détail, famille de navigateur, horodatages ; puis l’enregistrement est supprimé
180 jours au plus

Échelle proportionnelle, à compter de la tentative. Durées décidées par Antisy, à confirmer par un juriste avant la mise en service.

Ce qui est mesuré

Dans le navigateur, par le script

  • Les capacités que le navigateur déclare : mémoire, nombre de cœurs, écran, points tactiles et type de pointeur, type de connexion, cookies, visionneuse PDF et WebGL2 disponibles ou non.
  • Les langues et le fuseau horaire du navigateur : les langues sans la région, et le décalage du fuseau horaire.
  • Le rendu graphique et l’empreinte de l’appareil : une petite image dessinée puis mesurée, la classe du processeur graphique (Apple, Intel, NVIDIA…) et des condensés salés par site de ses caractéristiques (canvas, WebGL, polices, audio…), jamais l’image ni le nom de la carte graphique.
  • Des indices d’automatisation : un navigateur piloté par un programme, un environnement incohérent. Des catégories, jamais la valeur relevée.
  • Le comportement du moteur JavaScript : calculs, mise en page, horloges, temps d’exécution, ordre des tâches.
  • Le déroulé de l’interaction : premiers événements, frappes, pressions, distance et régularité du pointeur, défilement, durée, page visible et au premier plan ou non. Des compteurs et des agrégats, jamais la trajectoire ni le contenu des frappes et des champs.

À la réception, par le serveur d’Antisy

  • L’ordre des en-têtes HTTP : un condensé de leurs noms, jamais leurs valeurs.
  • L’adresse IP : celle de la requête, chiffrée en base tant qu’elle est gardée.
  • Le User-Agent : celui de la requête, chiffré en base tant qu’il est gardé.
  • Le contexte de la requête : langue acceptée, noms des en-têtes présents, hôte du référent, chemin, méthode, caractéristiques de la connexion (versions TLS et HTTP, protocole négocié, Client Hints) et, si votre serveur les transmet, durée de remplissage du formulaire et rang de la tentative ; chiffré en base tant qu’il est gardé.
Le détail : chaque donnée, chiffrée ou en clair
Conservation des données de visiteurs, à compter de la tentative
DélaiCe qui se passe
Quelques minutesMesures envoyées par le navigateur pour un jeton : conservées chiffrées quelques minutes, le temps de vérifier l'envoi, puis supprimées. Si la conservation est allumée pour le site (elle est éteinte par défaut), certaines d'entre elles sont gardées 30 jours, chiffrées : le rendu graphique mesuré, la classe et deux condensés du processeur graphique, le comportement du moteur JavaScript et les indices d'automatisation ; ni les capacités que le navigateur déclare, ni ses langues et son fuseau horaire, ni l'empreinte d'ensemble de l'appareil, ni le déroulé de l'interaction.
30 joursAdresse IP, User-Agent, contexte de la requête (langue acceptée, noms des en-têtes présents, hôte du référent, chemin, méthode ; caractéristiques de la connexion : versions TLS et HTTP, protocole négocié, présence des Client Hints, condensé de l'ordre des en-têtes ; et, quand le site les transmet, durée de remplissage du formulaire et rang de la tentative dans la session) et identifiant d'événement choisi par le site, chiffrés tant qu'ils sont gardés ; condensé de l'ordre des en-têtes HTTP, gardé en clair (leurs noms, jamais leurs valeurs) ; résultats de la vérification du jeton : tous effacés de l'enregistrement. Aucun préfixe ni condensé d'adresse IP n'est conservé au-delà. L'identifiant d'événement a aussi, à part, un index aveugle (un condensé à clé) qui ne sert qu'à reconnaître la reprise d'une même tentative : il s'efface passé 25 heures.
90 joursIdentifiant de connexion (chiffré et condensé), issue de la tentative, retours d'issue transmis par le site : effacés.
180 jours au plusCe qui reste (verdict, score, raisons, famille de navigateur, type d'événement, horodatages) : l'enregistrement est supprimé.

Ces durées sont des décisions internes d'Antisy, à confirmer par un juriste avant la mise en service. L'adresse IP, le User-Agent, le contexte de la requête et les mesures du navigateur sont chiffrés en base tant qu'ils sont gardés ; le condensé de l'ordre des en-têtes HTTP est gardé en clair, 30 jours au plus. L'empreinte TLS (JA4) n'est pas lue aujourd'hui.

Par qui, et où

Votre site reste responsable du traitement
Antisy agit comme sous-traitant (LPD art. 9), sous contrat.
Pour la sécurité de votre site
Jamais la publicité.
Hébergement
Infomaniak, en Suisse. Prévu : pas encore en service.

Le détail est dans la politique de confidentialité et le contrat de traitement, deux projets à valider par un avocat.

Tarifs

Quatre paliers, en francs suisses.

Hors TVA. L'accès passe par la liste d'attente.

Facturation

Prix affichés par mois.

  • Gratuit

    CHF 0

    sans carte bancaire

    • 2 500 vérifications par mois
    • 1 site
    • Au-delà : non facturé, site jamais bloqué
  • Pro

    CHF 199par mois

    Hébergement en Suisse prévu

    • 250 000 vérifications par mois
    • 10 sites
    • Au-delà : CHF 1 les 1 000
    • Support prioritaire
  • Entreprise

    dèsCHF 990par mois

    sur devisHébergement en Suisse prévu

    • Volume et sites négociés
    • Interlocuteur dédié
    • Engagement de disponibilité, accord de traitement
Rejoindre la liste d'attente

Le bouton ouvre votre messagerie : un e-mail à support@antisy.com, l'objet déjà rempli.

Entreprise, sur devis : précisez-le dans votre message à la liste d'attente.

Facturation annuelle : deux mois offerts, soit dix mois payés sur douze. Standard CHF 790 par an, Pro CHF 1 990 par an, Entreprise dès CHF 9 900 par an, hors TVA. Le choix « Annuelle » ci-dessus n'est qu'un affichage : rien ne se paie en ligne.

L'hébergement en Suisse est prévu chez Infomaniak ; il n'est pas encore en service (voir la confidentialité).

Comparer tous les critères

Gratuit

Prix par mois
CHF 0sans carte bancaire
Vérifications incluses par mois
2 500
Sites
1
Au-delà du quota
Non facturé, site jamais bloqué
Support prioritaire
Non
Contrat
Conditions générales
Vérifications par seconde (hypothèse)
25
Jetons par minute (hypothèse)
120

Standard

Prix par mois
CHF 79Hébergement en Suisse prévu
Vérifications incluses par mois
50 000
Sites
3
Au-delà du quota
CHF 1 les 1 000
Support prioritaire
Non
Contrat
Conditions générales
Vérifications par seconde (hypothèse)
100
Jetons par minute (hypothèse)
600

Pro

Prix par mois
CHF 199Hébergement en Suisse prévu
Vérifications incluses par mois
250 000
Sites
10
Au-delà du quota
CHF 1 les 1 000
Support prioritaire
Oui
Contrat
Conditions générales
Vérifications par seconde (hypothèse)
300
Jetons par minute (hypothèse)
1 800

Entreprise

Prix par mois
dès CHF 990sur devisHébergement en Suisse prévu
Vérifications incluses par mois
Négocié
Sites
Négocié
Au-delà du quota
Négocié
Support prioritaire
Oui, interlocuteur dédié
Contrat
Contrat négocié, engagement de disponibilité, accord de traitement
Vérifications par seconde (hypothèse)
800
Jetons par minute (hypothèse)
4 800

Gratuit, au-delà du quota : votre site n'est jamais bloqué. Le score ne décide plus, donc le site n'est plus protégé par le modèle ; un jeton invalide ou falsifié reste refusé, et un jeton absent aussi tant que la collecte du navigateur est allumée pour le site. L'attaque reste visible dans le tableau de bord ; le dépassement du quota vous est signalé une fois par mois par e-mail, à l'adresse des alertes de votre organisation si vous en avez réglé une.

Les cadences sont des hypothèses, à revalider au pilote. Une tentative au-delà de la cadence de votre palier n'est jamais refusée pour ce motif : elle est marquée, comptée et évaluée normalement. Seules des bornes techniques, communes à tous les paliers et fixées au-dessus de leurs cadences, refusent un débit plus fort (réponse 429).

Audit de votre connexion et de votre inscription : CHF 2 500 hors TVA, prix fixe, déduit du premier abonnement annuel Pro ou Entreprise. Prix hypothèse, à revoir après les premiers mandats.

Questions fréquentes

Les réponses courtes aux premières questions d’un intégrateur ou d’un décideur.

Qu’est-ce qu’Antisy ?

Antisy est un contrôle anti-bot pour les formulaires et les connexions d’un site web : il vérifie qu’un envoi vient d’un navigateur et non d’un programme, sans rien montrer au visiteur.

Une balise dans la page, un appel depuis votre serveur, et un verdict : allow ou deny. Vous décidez de la suite.

Antisy est le produit d’Antisy SARL, société suisse en création.

Quelle est la différence entre Antisy et un CAPTCHA ?

Un CAPTCHA classique demande au visiteur de prouver qu’il est humain : cocher une case, reconnaître des images, résoudre une énigme.

Antisy ne demande rien au visiteur et n’affiche rien : pas de case à cocher, pas d’énigme. Le script compte les interactions pendant que le visiteur remplit le formulaire, fait faire au navigateur un court calcul en arrière-plan et le mesure à l’envoi ; c’est votre serveur qui reçoit le verdict. On parle parfois de « CAPTCHA invisible » pour ce genre de contrôle.

Comment fonctionne Antisy ?

Le navigateur charge le script d’Antisy, qui ne montre rien au visiteur. À l’envoi du formulaire, le script met lui-même un jeton court dans un champ caché nommé antisy-token.

Votre serveur envoie ce jeton à POST /v1/siteverify, avec votre secret. La réponse dit allow ou deny : le visiteur passe, ou non. Vous décidez de la suite.

Que se passe-t-il si le script est bloqué ?

Le formulaire part quand même, sans jeton : sans champ antisy-token, ou avec ce champ vide si la page en porte déjà un. Lisez-le avec une valeur vide par défaut. C’est le cas avec un bloqueur de publicité ou de traceurs, une politique CSP incomplète, une page en HTTP, un visiteur sans JavaScript, ou un formulaire que le script ne couvre pas et dont la page n’appelle pas antisy.token(). Quand le script a retenu l’envoi et que le jeton tarde, le formulaire part au bout de 6 secondes au plus.

La suite dépend du réglage « Collecte du navigateur » du site. Collecte allumée, un envoi sans jeton ne passe pas : verdict deny. Collecte éteinte, l’absence de jeton n’est pas reprochée. Un site neuf naît avec la collecte éteinte.

Quelles données Antisy traite-t-il ?

Dans le navigateur, le script mesure les capacités que le navigateur déclare, les langues et le fuseau horaire du navigateur, le rendu graphique et l’empreinte de l’appareil, des indices d’automatisation, le comportement du moteur JavaScript et le déroulé de l’interaction. Le serveur d’Antisy lit l’ordre des en-têtes HTTP, l’adresse IP, le User-Agent et le contexte de la requête. Jamais l’image dessinée, le nom de la carte graphique ni le contenu des frappes et des champs.

Antisy garde aussi, pour une connexion, un identifiant de connexion chiffré et condensé : la page d’accueil détaille chaque mesure et chaque durée de conservation. Ces données comprennent des données personnelles, que la politique de confidentialité, encore en projet, décrit.

Où les données sont-elles hébergées ?

L’hébergement est prévu chez Infomaniak, en Suisse. Il n’est pas encore en service.

Combien coûte Antisy ?

Quatre paliers, en francs suisses, hors TVA : Gratuit (CHF 0, 2 500 vérifications par mois, 1 site), Standard (CHF 79 par mois, 50 000 vérifications par mois, 3 sites), Pro (CHF 199 par mois, 250 000 vérifications par mois, 10 sites) et Entreprise (dès CHF 990 par mois, sur devis).

En facturation annuelle, dix mois sont payés sur douze. Rien ne se paie en ligne : l’accès se fait sur liste d’attente.

Peut-on utiliser Antisy aujourd’hui ?

Pas encore. L’accès se fait sur liste d’attente : rien n’est encore en service, et l’hébergement en Suisse est prévu, pas encore en service. L’API répondra sur api.antisy.com dès sa mise en service.

Un pilote est prévu ; il n’a pas commencé, et aucune date n’est annoncée. Vous pouvez laisser une adresse sur la liste d’attente : Antisy vous écrit à l’ouverture des accès, et pour rien d’autre.

Liste d’attente

Les accès ouvrent au fil du lancement.

Laissez une adresse : nous vous écrivons à l'ouverture, et pour rien d'autre.

Écrivez-nous depuis votre adresse professionnelle, avec votre nom, votre société et, si vous le souhaitez, votre cas d'usage.

Rejoindre la liste d'attente

Le bouton ouvre votre messagerie : un e-mail à support@antisy.com, l'objet déjà rempli.

Votre adresse ne sert qu'à vous recontacter. Voir la politique de confidentialité (projet).