Clustraly
Commentaires, contact, formulaires & newsletter

CAPTCHA optionnel (CaptchaService) : un bouclier anti-bot exactement là où vous en avez besoin

CAPTCHA optionnel (CaptchaService) une fonctionnalité du module Commentaires, contact, formulaires & newsletter de Clustraly. CAPTCHA optionnel (CaptchaService) est un service de vérification anti-bot piloté par configuration, activable par formulaire, supportant Cloudflare Turnstile ou hCaptcha, inerte par défaut.

Un défi de vérification que vous activez formulaire par formulaire. Il reste silencieux tant que vous ne l'avez pas configuré, et devient infranchissable même quand le fournisseur tombe. L'IA propose la défense, vous décidez où l'appliquer.

Protection à la carte

Un défi anti-bot que vous n'activez que là où il compte

Vos surfaces publiques attirent les robots. Le CAPTCHA optionnel ajoute une vérification sur les formulaires que vous choisissez, sans alourdir ceux qui n'en ont pas besoin.

Vous gardez la main : commentaire, message de contact ou formulaire, la décision se prend surface par surface.

  • Activation indépendante pour commentaires, contact et formulaires
  • Aucun défi imposé là où honeypot et time-trap suffisent
  • Compatible Cloudflare Turnstile ou hCaptcha
Piloté par la configuration

Deux fournisseurs reconnus, branchés depuis vos variables d'environnement

Tout est piloté par la configuration (config/app.php['antispam'] alimenté par .env). Vous choisissez Cloudflare Turnstile ou hCaptcha, renseignez le fournisseur et les clés, et le widget apparaît.

Le défi est respectueux de la vie privée : aucune donnée personnelle superflue n'est réclamée à vos visiteurs.

  • Cloudflare Turnstile ou hCaptcha au choix
  • Fournisseur et clés définis dans .env
  • Défi respectueux de la vie privée des visiteurs
Inerte par défaut

Rien ne casse tant que vous n'avez pas décidé de l'activer

Sans fournisseur ni les deux clés, isConfigured() reste faux : aucun script ni widget n'est émis, et verify() passe. Vos formulaires continuent de tourner sur honeypot et time-trap seuls.

Cette dégradation gracieuse garantit qu'une configuration incomplète ne bloque jamais un formulaire par accident.

  • Sans clés, aucun script ni widget n'est émis
  • Le formulaire reste protégé par honeypot + time-trap
  • Aucune config incomplète ne bloque un envoi légitime
Un réglage par surface

Décidez pour les commentaires, le contact ou les formulaires

L'activation se fait via enabledFor('comments' / 'contact' / 'forms'), piloté par antispam.captcha_on_{form}. Chaque surface a sa propre bascule.

Le widget est un simple conteneur div doublé d'un script externe autorisé en CSP, sans code en ligne ; le champ de réponse est cf-turnstile-response ou h-captcha-response.

  • Bascule par surface : comments, contact, forms
  • Widget conforme CSP, aucun code en ligne
  • Champ de réponse standard du fournisseur
Vérification côté serveur

Le jeton est vérifié au serveur, et une panne ne devient pas une porte dérobée

À la soumission, verify() poste le jeton à l'API siteverify du fournisseur (cURL avec repli sur contexte de flux, délai de 5 s). Un jeton manquant provoque un échec.

Et toute panne de transport échoue fermé (fail-closed, journalisée) : une coupure provoquée ne peut pas servir à contourner la protection.

  • Jeton vérifié auprès de l'API siteverify du fournisseur
  • Jeton manquant = échec
  • Panne réseau = échec fermé (fail-closed), journalisé
Pourquoi ça compte

Inerte quand vous n'en voulez pas, infranchissable quand il le faut

Deux garde-fous encadrent le service. Sans clés, il reste inerte : aucun widget émis, la vérification passe, et vos formulaires tournent sur honeypot et time-trap. Une fois activé, toute panne de transport échoue fermé et reste journalisée impossible d'en faire une porte dérobée.

FAQ

Questions fréquentes

Quels fournisseurs de CAPTCHA sont supportés ?
Cloudflare Turnstile et hCaptcha, au choix. Le fournisseur et ses clés se définissent par configuration dans config/app.php['antispam'], alimenté par votre fichier .env.
Que se passe-t-il si je n'active aucun CAPTCHA ?
Le service reste inerte : isConfigured() est faux, aucun script ni widget n'est émis et verify() passe. Vos formulaires restent protégés par honeypot et time-trap, en dégradation gracieuse.
Le CAPTCHA s'applique-t-il partout d'un coup ?
Non. Vous l'activez indépendamment pour les commentaires, les messages de contact et les formulaires, via enabledFor et le réglage antispam.captcha_on_{form}.
Que se passe-t-il si le service du fournisseur tombe ?
La vérification échoue fermé (fail-closed) et l'incident est journalisé. Une panne, même provoquée, ne peut donc pas être exploitée comme porte dérobée pour passer sans défi.
Prêt à commencer ?

Ajoutez un défi anti-bot, sans jamais alourdir ce qui n'en a pas besoin

Le CAPTCHA optionnel n'ajoute de friction que là où vous le décidez. Choisissez Cloudflare Turnstile ou hCaptcha, renseignez vos clés, activez la protection sur les commentaires, le contact ou les formulaires et laissez le service rester silencieux partout ailleurs. La défense est proposée ; le périmètre, c'est vous qui le tracez.