Qu’est-ce que Cloudflare Turnstile ?
Cloudflare Turnstile est un service de protection contre les soumissions automatisées. Il peut être intégré à des formulaires de contact, d’inscription ou à d’autres fonctionnalités nécessitant une vérification.
Contrairement aux CAPTCHA traditionnels, Turnstile privilégie des vérifications discrètes. Selon le contexte et le mode choisi, le visiteur peut toutefois devoir effectuer une interaction.
Le principe repose sur deux éléments :
- Un widget, intégré à la page, qui génère un jeton de vérification.
- Une validation côté serveur, qui transmet ce jeton à Cloudflare pour vérifier sa validité.
Cette seconde étape est indispensable. Afficher le widget sans contrôler sa réponse côté serveur ne suffit pas à protéger un formulaire.
Turnstile permet de réduire les soumissions automatisées, mais ne garantit pas l’élimination de tous les spams.
Créer les clés Cloudflare Turnstile
Avant de configurer WordPress, vous devez créer un widget Turnstile dans votre compte Cloudflare.
Accéder à Cloudflare Turnstile
Rendez-vous sur le site de Cloudflare :
https://www.cloudflare.com/
Créez un compte si vous n’en possédez pas, puis connectez-vous à votre tableau de bord.
Accédez à la rubrique Turnstile et choisissez l’option permettant d’ajouter un widget.
L’organisation du tableau de bord peut évoluer, mais le principe de configuration reste le même.
Configurer le widget
Lors de la création du widget :
- Indiquez un nom permettant de reconnaître votre site.
- Ajoutez le ou les noms de domaine autorisés à utiliser le widget.
- Choisissez le mode de fonctionnement adapté à votre formulaire.
- Enregistrez la configuration.
Le mode Managed (géré) est un bon point de départ : Cloudflare adapte la vérification au contexte de la visite.



Une fois le widget créé, Cloudflare fournit deux informations :
- La clé de site (site key) : elle est utilisée dans le code HTML du formulaire et peut être visible publiquement.
- La clé secrète (secret key) : elle sert à vérifier les réponses côté serveur et ne doit jamais être exposée dans le navigateur.
Conservez ces deux clés pour la suite.

Protéger un formulaire Contact Form 7
Contact Form 7 propose une intégration native de Cloudflare Turnstile sur les versions qui prennent en charge ce service.
Je recommande de privilégier cette intégration lorsqu’elle est disponible, plutôt que d’ajouter du code personnalisé.
Utiliser l’intégration native de Contact Form 7
Dans l’administration WordPress :
- Vérifiez que Contact Form 7 est à jour.
- Ouvrez Contact > Intégration.
- Recherchez la section consacrée à Turnstile.
- Renseignez la clé de site et la clé secrète fournies par Cloudflare.
- Enregistrez les paramètres.
Consultez ensuite la page contenant votre formulaire pour vérifier que Turnstile est correctement chargé.
Selon la version de Contact Form 7 et sa configuration, le fonctionnement et l’emplacement du widget peuvent varier.
Effectuez toujours un test d’envoi réel après l’activation.
Quand envisager une intégration personnalisée ?
Une intégration en PHP peut être utile si vous développez un formulaire sur mesure ou si vous devez contrôler précisément l’affichage et la validation du widget.
En revanche, n’ajoutez pas le code ci-dessous en complément de l’intégration native de Contact Form 7. Deux intégrations simultanées peuvent provoquer des vérifications en double ou des échecs d’envoi.
La suite présente donc une méthode alternative destinée à un formulaire Contact Form 7 pour lequel l’intégration native n’est pas activée.
Intégrer Turnstile manuellement avec Contact Form 7
Cette méthode nécessite de pouvoir ajouter du code PHP à WordPress.
Pour éviter de perdre vos modifications lors d’une mise à jour, utilisez un thème enfant ou un outil de gestion de snippets PHP. Ne modifiez pas directement les fichiers d’une extension.
Charger le script Turnstile
Le widget a besoin du script JavaScript fourni par Cloudflare.
Ajoutez ce code PHP à votre site :
add_action('wp_enqueue_scripts', function () {
wp_enqueue_script(
'upmywp-turnstile',
'https://challenges.cloudflare.com/turnstile/v0/api.js',
array(),
null,
true
);
});Ce code charge le script officiel de Turnstile sur les pages du site.
Pour une intégration plus optimisée, vous pouvez limiter ce chargement aux pages qui contiennent réellement un formulaire protégé.
Ajouter le widget dans le formulaire
Ouvrez le formulaire concerné dans Contact Form 7 et insérez le code HTML suivant avant le bouton d’envoi :
<div class="cf-turnstile" data-sitekey="VOTRE-CLE-DE-SITE"></div>Remplacez VOTRE-CLE-DE-SITE par la clé publique obtenue dans Cloudflare.

Le script Turnstile détecte cet élément et affiche le widget.
Lors de la vérification, un jeton est transmis avec le formulaire sous le nom cf-turnstile-response.
Attention : ce jeton ne constitue pas une preuve suffisante à lui seul. Il doit être vérifié par le serveur WordPress auprès de Cloudflare avant d’autoriser l’envoi du message.
Vérifier la réponse Turnstile côté serveur
Pour Contact Form 7, nous allons utiliser le filtre wpcf7_spam. Il permet de signaler qu’une soumission doit être considérée comme du spam avant l’envoi de l’e-mail.
Le code suivant vérifie la présence du jeton, interroge l’API de validation de Cloudflare et refuse la soumission si la vérification échoue.
add_filter('wpcf7_spam', function ($spam) {
if ($spam) {
return true;
}
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return true;
}
$posted_data = $submission->get_posted_data();
$token = isset($posted_data['cf-turnstile-response'])
? sanitize_text_field(
$posted_data['cf-turnstile-response']
)
: '';
if ($token === '') {
return true;
}
$secret = 'VOTRE-CLE-SECRETE';
$response = wp_remote_post(
'https://challenges.cloudflare.com/turnstile/v0/siteverify',
array(
'timeout' => 10,
'body' => array(
'secret' => $secret,
'response' => $token,
),
)
);
if (is_wp_error($response)) {
return true;
}
if (200 !== wp_remote_retrieve_response_code($response)) {
return true;
}
$result = json_decode(
wp_remote_retrieve_body($response),
true
);
return !(
is_array($result)
&& !empty($result['success'])
);
}, 10, 1);Remplacez VOTRE-CLE-SECRETE par la clé secrète associée à votre widget Cloudflare.
Pour un site en production, il est préférable de stocker cette clé dans une configuration serveur non publique, plutôt que de l’écrire directement dans un snippet.
Ce que fait le code :
- Il conserve le résultat d’une éventuelle détection de spam déjà effectuée par Contact Form 7.
- Il refuse une soumission si le jeton Turnstile est absent.
- Il transmet le jeton à l’API officielle de Cloudflare.
- Il refuse l’envoi si Cloudflare renvoie un échec, une réponse inexploitable ou si la requête réseau échoue.
- Il laisse Contact Form 7 poursuivre son traitement uniquement lorsque la vérification réussit.
Cette logique est importante : en cas de doute, le formulaire ne doit pas considérer la vérification comme réussie.
Le code constitue un exemple pour un formulaire protégé. Si plusieurs formulaires Contact Form 7 sont présents sur votre site, il faut adapter la validation aux formulaires concernés et vérifier qu’ils disposent tous du widget nécessaire.
Tester la protection de vos formulaires
Après la configuration, ne vous contentez pas de vérifier que le widget apparaît à l’écran.
Effectuez plusieurs tests :
- Envoyez un message normal pour vérifier que le formulaire fonctionne.
- Vérifiez que le message est bien reçu.
- Essayez une soumission sans jeton Turnstile.
- Vérifiez que le formulaire refuse une réponse invalide.
- Contrôlez le fonctionnement sur mobile.
- Vérifiez que les outils de cache ou d’optimisation JavaScript ne perturbent pas le widget.
Un formulaire peut sembler fonctionner correctement tout en laissant passer des soumissions automatisées si la validation côté serveur est absente ou mal configurée.
Si vous utilisez plusieurs protections antispam, vérifiez également qu’elles ne se gênent pas mutuellement.
Une protection à maintenir dans le temps
Turnstile est un outil utile pour réduire le spam, mais il ne remplace pas les autres bonnes pratiques de sécurité WordPress.
La protection contre les robots ne concerne pas uniquement les formulaires de contact. La page de connexion WordPress peut elle aussi être ciblée par des tentatives automatisées. Découvrez également comment sécuriser la connexion à l’administration WordPress.
Les extensions, les formulaires et les services externes évoluent. Après certaines mises à jour, il peut être nécessaire de vérifier que la protection fonctionne toujours correctement.
Ce suivi fait partie des contrôles à envisager dans le cadre de la maintenance de votre site WordPress.
Pour découvrir les autres points de vigilance, consultez mon guide consacré à la sécurité WordPress.
Besoin d’aide pour protéger vos formulaires WordPress ?
Vous recevez trop de spam ou souhaitez sécuriser un formulaire personnalisé ? Contactez-moi pour étudier une solution adaptée à votre site et à son fonctionnement.


