"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Migrando do reCAPTCHA do Google para o Cloudflare Turnstile?

Migrando do reCAPTCHA do Google para o Cloudflare Turnstile?

Publicado em 31/07/2024
Navegar:156

Migrating from Google

O novo preço do Google reCAPTCHA será lançado em 1º de agosto, o que significa que você tem alguns dias restantes para migrar para uma alternativa mais barata ou garantir que sua conta bancária esteja bem financiada.

A partir de US$ 1 para 1.000 verificações, vai custar muito caro. Na Mailmeteor, usamos extensivamente o reCAPTCHA para proteger nossos serviços contra bots. Com a mudança de preços do Google, calculamos que estamos prestes a pagar milhares de dólares por mês para continuar usando o serviço reCAPTCHA.

O que é um CAPTCHA?

CAPTCHAs são uma parte essencial da web. O objetivo é separar os bons cidadãos dos maus atores. Essencialmente, é um serviço que irá operar no frontend e gerar um token que será transmitido ao backend. O backend então verifica se o token é legítimo e, em caso afirmativo, executa a ação.

O Google fez um ótimo trabalho ao promover seu próprio serviço, mas, felizmente, existem algumas alternativas:

  1. hCaptcha. Consideramos isso no início, mas o preço deles é bastante semelhante ao novo preço do Google.
  2. Torniquete Cloudflare. Somos grandes fãs do Cloudflare e definitivamente investigamos isso. Por enquanto, é um serviço gratuito.

Vamos cavar.

Afastando-se do Google reCAPTCHA...

Uma de nossas ferramentas gratuitas é um AI Email Writer. É basicamente uma página HTML que envia solicitações ao nosso back-end, que então envia para uma solução de IA de terceiros.

Para protegê-lo contra abusos, o Google reCAPTCHA foi ativado desde o primeiro dia. Veja como a verificação foi feita até agora (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 



Isso é bastante simples e é uma parte essencial do motivo pelo qual o Google reCAPTCHA se tornou tão popular. A pegada é muito limitada e é muito fácil de implementar. Para os mais curiosos, aproveitamos o pacote express-recaptcha para torná-lo realmente fácil de implementar.

... para a catraca Cloudflare

Ao migrar para o Turnstile, não conseguimos encontrar um pacote NPM, então tivemos que escrever um middleware para processar o token. Veja como fica:

// 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 }

Assim que o middleware estiver instalado, podemos aplicá-lo a qualquer solicitação:

// index.js
app.post('/api/ai-email-writer', aiRateLimiter, turnstile, aiEmailWriter)

E dentro da função que trata a requisição, é bem parecido com o que tínhamos anteriormente:

// 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' })
    }

    ...

Conclusão

Migrar do reCAPTCHA para o Turnstile é simples e não deve levar mais do que algumas horas. Funciona de forma bastante semelhante e com certeza você economizará muito dinheiro ao mesmo tempo.

Não abordei o frontend neste artigo, porque usamos um widget invisível que nossos usuários não veem. Mas a documentação da Turnstile cobre extensivamente como usar seus widgets interativos.

Encerre o dia!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/frenchcooc/migrating-from-googles-recaptcha-to-cloudflare-turnstile-17lf?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3