«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Переходите с reCAPTCHA Google на турникет Cloudflare?

Переходите с reCAPTCHA Google на турникет Cloudflare?

Опубликовано 31 июля 2024 г.
Просматривать:974

Migrating from Google

Новые цены на Google reCAPTCHA будут объявлены 1 августа. Это означает, что у вас осталось несколько дней, чтобы перейти на более дешевую альтернативу или убедиться, что ваш банковский счет хорошо пополнен.

Начиная с 1 доллара США за 1000 проверок, это будет стоить дорого. В Mailmeteor мы широко используем reCAPTCHA для защиты наших сервисов от ботов. Мы подсчитали, что с учетом изменения цен Google нам придется платить тысячи долларов в месяц за то, чтобы продолжать использовать их службу reCAPTCHA.

Что такое КАПЧА?

CAPTCHA — неотъемлемая часть Интернета. Его цель – отделить хороших граждан от плохих актеров. По сути, это служба, которая будет работать на внешнем интерфейсе и генерировать токен, который передается на серверную часть. Затем серверная часть проверяет, что токен является законным, и, если это так, выполняет действие.

Google проделала отличную работу по продвижению собственного сервиса, но, к счастью, есть альтернативы:

  1. hCaptcha. Сначала мы это рассматривали, но их цены очень похожи на новые цены Google.
  2. Облачный турникет. Мы большие поклонники Cloudflare и определенно присмотрелись к нему. На данный момент это бесплатная услуга.

Давайте углубимся.

Отходим от Google reCAPTCHA...

Один из наших бесплатных инструментов — AI Email Writer. По сути, это HTML-страница, которая отправляет запрос на наш сервер, который затем передает стороннему решению искусственного интеллекта.

Чтобы защитить его от злоупотреблений, с первого дня была включена Google reCAPTCHA. Вот как проводилась проверка (на стороне сервера):

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



Это довольно просто, и это важная часть того, почему Google reCAPTCHA была такой популярной. Размер очень ограничен, и его действительно легко реализовать. Для самых любопытных мы использовали пакет экспресс-рекапчи, чтобы упростить его реализацию.

... к турникету Cloudflare

При переходе на Turnstile мы не смогли найти пакет NPM, поэтому нам пришлось написать промежуточное программное обеспечение для обработки токена. Вот как это выглядит:

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

Как только промежуточное программное обеспечение будет установлено, мы сможем применять его к любым запросам:

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

А внутри функции, обрабатывающей запрос, все очень похоже на то, что мы использовали ранее:

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

    ...

Заключение

Миграция с reCAPTCHA на Turnstile проста и не займет более нескольких часов. Он работает очень похоже и в то же время определенно сэкономит вам много денег.

В этой статье я не рассматривал интерфейс, поскольку мы используем невидимый виджет, который не видят наши пользователи. Но документация Turnstile подробно описывает, как использовать интерактивные виджеты.

На этом хватит!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/frenchcooc/migrating-from-googles-recaptcha-to-cloudflare-turnstile-17lf?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3