"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Google reCAPTCHA에서 Cloudflare Turnstile로 마이그레이션하시나요?

Google reCAPTCHA에서 Cloudflare Turnstile로 마이그레이션하시나요?

2024-07-31에 게시됨
검색:167

Migrating from Google

Google reCAPTCHA의 새로운 가격은 8월 1일에 출시됩니다. 즉, 며칠 내에 더 저렴한 대안으로 마이그레이션하거나 은행 계좌에 충분한 자금이 있는지 확인할 수 있습니다.

1,000번의 인증에 1달러부터 시작하면 비용이 많이 들 것입니다. Mailmeteor에서는 reCAPTCHA를 광범위하게 사용하여 봇으로부터 서비스를 보호합니다. Google의 가격 변경으로 인해 reCAPTCHA 서비스를 계속 사용하려면 매월 수천 달러를 지불해야 한다고 계산했습니다.

보안문자란 무엇인가요?

CAPTCHA는 웹의 필수적인 부분입니다. 이는 좋은 시민과 나쁜 행위자를 분리하는 것을 목표로 합니다. 기본적으로 이는 프런트엔드에서 작동하고 백엔드로 전송되는 토큰을 생성하는 서비스입니다. 그런 다음 백엔드는 토큰이 합법적인지 확인하고, 그렇다면 작업을 수행합니다.

Google은 자체 서비스를 홍보하는 데 큰 역할을 했지만 다행히도 다음과 같은 몇 가지 대안이 있습니다.

  1. hCaptcha. 처음에는 고려했지만 가격은 새로운 Google의 가격과 상당히 유사합니다.
  2. Cloudflare 개찰구. 우리는 Cloudflare의 열렬한 팬이므로 확실히 살펴보았습니다. 현재로서는 무료 서비스입니다.

자세히 살펴보겠습니다.

Google reCAPTCHA에서 벗어나는 중...

무료 도구 중 하나는 AI 이메일 작성기입니다. 이는 기본적으로 백엔드로 요청을 보낸 후 타사 AI 솔루션으로 보내는 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가 그토록 인기를 얻은 이유 중 하나입니다. 설치 공간은 매우 제한되어 있으며 구현하기가 정말 쉽습니다. 가장 궁금한 분들을 위해 우리는 express-recaptcha 패키지를 활용하여 구현을 매우 쉽게 만들었습니다.

...Cloudflare Turnstile로

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/migating-from-googles-recaptcha-to-cloudflare-turnstile-17lf?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]에 문의하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3