La nouvelle tarification de Google reCAPTCHA sera déployée le 1er août, ce qui signifie qu'il vous reste quelques jours pour migrer vers une alternative moins chère ou vous assurer que votre compte bancaire est bien approvisionné.
À partir de 1 $ pour 1 000 vérifications, cela va coûter très cher. Chez Mailmeteor, nous utilisons largement reCAPTCHA pour protéger nos services contre les robots. Avec le changement de prix de Google, nous avons calculé que nous étions sur le point de payer des milliers de dollars par mois pour continuer à utiliser leur service reCAPTCHA.
Les CAPTCHA sont un élément essentiel du Web. Son objectif est de séparer les bons citoyens des mauvais acteurs. Essentiellement, il s'agit d'un service qui fonctionnera sur le frontend et générera un jeton qui sera transmis au backend. Le backend vérifie ensuite que le jeton est légitime et, si tel est le cas, exécute l'action.
Google a fait un excellent travail en promouvant son propre service, mais heureusement, il existe des alternatives :
Creuseons.
L'un de nos outils gratuits est un rédacteur d'e-mails IA. Il s'agit essentiellement d'une page HTML qui envoie une requête à notre backend, qui est ensuite transmise à une solution d'IA tierce.
Pour le protéger des abus, Google reCAPTCHA a été activé dès le premier jour. Voici comment la vérification a été effectuée jusqu'à présent (côté backend) :
// index.js app.post('/api/email-ai-writer', recaptcha.middleware.verify, aiEmailWriter) // ai_email_writer.js async function aiEmailWriter(request, response) { try { // Recaptcha if (!request.recaptcha || request.recaptcha.error || !request.recaptcha.data) { console.warn('Recaptcha: verification failed.') return response.status(403).send({ error: true, message: 'Recaptcha: verification failed' }) } else if (request.recaptcha.data.action !== 'aiemailwriter') { console.warn('Recaptcha: bad action name') return response.status(403).send({ error: true, message: 'Recaptcha: bad action name' }) } else if (request.recaptcha.data.score < 0.3) { const score = request.recaptcha.data.score console.warn(`Recaptcha: score is below 0.3 (${score})`) return response.status(403).send({ error: true, message: 'Recaptcha: score too low' }) } ...
C'est assez simple et c'est une partie essentielle de la raison pour laquelle Google reCAPTCHA était si populaire. L'encombrement est très limité et c'est vraiment facile à mettre en œuvre. Pour les plus curieux, nous avons exploité le package express-recaptcha pour le rendre vraiment simple à mettre en œuvre.
Lors de la migration vers Turnstile, nous n'avons pas trouvé de package NPM, nous avons donc dû écrire un middleware pour traiter le jeton. Voici à quoi cela ressemble :
// middlewares/turnstile.js const turnstile = async (request, response, next) => { try { // Turnstile injects a token in "cf-turnstile-response". const token = request.query['cf-turnstile-response'] const ip = request.header('CF-Connecting-IP') if (!token) { throw new Error('Missing CloudFlare Turnstile Token') } // Validate the token by calling the // "/siteverify" API endpoint. const formData = new FormData() formData.append('secret', process.env.CLOUDFLARE_TURNSTILE_SECRET_KEY) formData.append('response', token) if (ip) formData.append('remoteip', ip) const url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify' const result = await fetch(url, { body: formData, method: 'POST', }) // Process the verification outcome const outcome = await result.json() if (!outcome.success) { throw new Error('CloudFlare Turnstile declined the token') } request.turnstile = outcome // If authentified, go to next middleware next() } catch (err) { console.error(err) return response.status(403).send('Forbidden') } } export { turnstile }
Une fois le middleware en place, nous pouvons l'appliquer à toutes demandes :
// index.js app.post('/api/ai-email-writer', aiRateLimiter, turnstile, aiEmailWriter)
Et à l'intérieur de la fonction qui traite la requête, c'est assez similaire à ce qu'on avait précédemment :
// ai_email_writer.js async function aiEmailWriter(request, response) { try { // CloudFlare Turnstile protection if (!request.turnstile || request.turnstile.error) { console.warn('Recaptcha: verification failed.') return response.status(403).json({ error: true, message: 'Recaptcha: verification failed' }) } else if (request.turnstile.action !== 'aiemailwriter') { console.warn('Recaptcha: bad action name') return response.status(403).json({ error: true, message: 'Recaptcha: bad action name' }) } ...
La migration de reCAPTCHA vers Turnstile est simple et ne devrait pas prendre plus de quelques heures. Cela fonctionne de manière assez similaire et vous fera certainement économiser beaucoup d'argent en même temps.
Je n'ai pas abordé le frontend dans cet article, car nous utilisons un widget invisible que nos utilisateurs ne voient pas. Mais la documentation de Turnstile explique en détail comment utiliser leurs widgets interactifs.
C'est fini !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!