Rumah hujung hadapan web tutorial js Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?

Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?

Jul 23, 2024 pm 12:19 PM

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.

Apa itu CAPTCHA?

CAPTCHA ialah bahagian penting dalam web. Ia bertujuan untuk memisahkan warga yang baik daripada aktor 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, melakukan 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.

Mari kita mendalami.

Beralih daripada Google reCAPTCHA...

Salah satu alatan percuma kami ialah Penulis E-mel AI. Ia pada asasnya ialah 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 perisian tengah 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 pada 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 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

Berhijrah 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 halimunan yang pengguna kami tidak nampak. Tetapi dokumentasi Turnstile merangkumi secara meluas cara menggunakan widget interaktif mereka.

Sebut saja sehari!

Atas ialah kandungan terperinci Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ganti aksara rentetan dalam javascript Ganti aksara rentetan dalam javascript Mar 11, 2025 am 12:07 AM

Ganti aksara rentetan dalam javascript

periksa jQuery jika tarikh sah periksa jQuery jika tarikh sah Mar 01, 2025 am 08:51 AM

periksa jQuery jika tarikh sah

jQuery mendapatkan padding/margin elemen jQuery mendapatkan padding/margin elemen Mar 01, 2025 am 08:53 AM

jQuery mendapatkan padding/margin elemen

10 Tab Accordion JQuery 10 Tab Accordion JQuery Mar 01, 2025 am 01:34 AM

10 Tab Accordion JQuery

10 patut diperiksa plugin jQuery 10 patut diperiksa plugin jQuery Mar 01, 2025 am 01:29 AM

10 patut diperiksa plugin jQuery

HTTP Debugging dengan Node dan HTTP-Console HTTP Debugging dengan Node dan HTTP-Console Mar 01, 2025 am 01:37 AM

HTTP Debugging dengan Node dan HTTP-Console

Tutorial Persediaan API Carian Google Custom Tutorial Persediaan API Carian Google Custom Mar 04, 2025 am 01:06 AM

Tutorial Persediaan API Carian Google Custom

jQuery tambah bar scroll ke div jQuery tambah bar scroll ke div Mar 01, 2025 am 01:30 AM

jQuery tambah bar scroll ke div

See all articles