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

Berhijrah daripada reCAPTCHA Google ke Cloudflare Turnstile?

王林
Lepaskan: 2024-07-23 12:19:58
asal
428 orang telah melayarinya

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!

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