Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?

王林
Lepaskan: 2024-07-23 12:19:58
asal
213 人浏览过

Migrating from Google

Harga baharu Google reCAPTCHA akan dilancarkan pada 1 Ogos, bermakna anda mempunyai beberapa hari lagi untuk berhijrah ke alternatif yang lebih murah atau memastikan akaun bank anda dibiayai dengan baik.

Bermula pada $1 untuk 1,000 pengesahan, ia akan menelan kos yang tinggi. Di Mailmeteor, kami menggunakan reCAPTCHA secara meluas untuk melindungi perkhidmatan kami daripada bot. Dengan perubahan harga Google, kami mengira bahawa kami akan membayar beribu-ribu dolar sebulan untuk terus menggunakan perkhidmatan reCAPTCHA mereka.

Apakah itu CAPTCHA?

CAPTCHA ialah bahagian penting dalam web. Ia bertujuan untuk memisahkan warga yang baik daripada pelakon yang tidak baik. Pada asasnya, ia adalah perkhidmatan yang akan beroperasi pada bahagian hadapan dan menjana token yang dihantar ke bahagian belakang. Bahagian belakang kemudian mengesahkan bahawa token itu sah dan, jika ya, lakukan tindakan itu.

Google melakukan kerja yang hebat dalam mempromosikan perkhidmatan mereka sendiri, tetapi syukur, terdapat beberapa alternatif:

  1. hCaptcha. Kami mempertimbangkannya pada mulanya, tetapi harga mereka agak serupa dengan harga Google baharu.
  2. Pintu Putar Cloudflare. Kami adalah peminat besar Cloudflare, dan pasti melihatnya. Buat masa ini, ia adalah perkhidmatan percuma.

Jom kita gali.

Beralih daripada Google reCAPTCHA...

Salah satu alatan percuma kami ialah Penulis E-mel AI. Ia pada asasnya adalah halaman HTML yang menghantar permintaan ke bahagian belakang kami, yang kemudiannya membuat kepada penyelesaian AI pihak ketiga.

Untuk melindunginya daripada penyalahgunaan, Google reCAPTCHA telah didayakan dari hari pertama. Begini cara pengesahan dilakukan setakat ini (bahagian belakang):

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

    ...
Salin selepas log masuk

Itu agak mudah dan ia merupakan bahagian penting mengapa Google reCAPTCHA begitu popular. Jejaknya sangat terhad dan ia sangat mudah untuk dilaksanakan. Untuk yang paling ingin tahu, kami memanfaatkan pakej express-recaptcha untuk menjadikannya sangat mudah untuk dilaksanakan.

... ke Cloudflare Turnstile

Apabila berhijrah ke Turnstile, kami tidak menemui pakej NPM, jadi kami terpaksa menulis middleware untuk memproses token. Begini rupanya:

// 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 }
Salin selepas log masuk

Setelah perisian tengah tersedia, kami boleh menggunakannya untuk sebarang permintaan:

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

Dan di dalam fungsi yang merawat permintaan, ia agak serupa dengan apa yang kami ada sebelum ini:

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

    ...
Salin selepas log masuk

Kesimpulan

Perpindahan daripada reCAPTCHA ke Turnstile adalah mudah dan tidak perlu mengambil masa lebih daripada beberapa jam. Ia berfungsi agak serupa dan pastinya akan menjimatkan banyak wang pada masa yang sama.

Saya tidak menutup bahagian hadapan dalam artikel ini, kerana kami menggunakan widget yang tidak kelihatan yang pengguna kami tidak nampak. Tetapi dokumentasi Turnstile merangkumi secara meluas cara menggunakan widget interaktif mereka.

Sebut saja sehari!

以上是Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?的详细内容。更多信息请关注PHP中文网其他相关文章!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!