"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل تريد الترحيل من reCAPTCHA من Google إلى Cloudflare Turnstile؟

هل تريد الترحيل من reCAPTCHA من Google إلى Cloudflare Turnstile؟

تم النشر بتاريخ 2024-07-31
تصفح:882

Migrating from Google

سيتم طرح أسعار Google reCAPTCHA الجديدة في الأول من أغسطس، مما يعني أنه أمامك بضعة أيام متبقية للانتقال إلى بديل أرخص أو التأكد من أن حسابك المصرفي ممول بشكل جيد.

بدءًا من دولار واحد مقابل 1000 عملية تحقق، سيكلف ذلك الكثير. في Mailmeteor، نستخدم reCAPTCHA على نطاق واسع لحماية خدماتنا من الروبوتات. مع تغيير أسعار Google، حسبنا أننا على وشك دفع آلاف الدولارات شهريًا للاستمرار في استخدام خدمة reCAPTCHA الخاصة بهم.

ما هو اختبار CAPTCHA؟

تعتبر اختبارات CAPTCHA جزءًا أساسيًا من الويب. ويهدف إلى فصل المواطنين الصالحين عن الجهات الفاعلة السيئة. في الأساس، إنها خدمة ستعمل على الواجهة الأمامية وتقوم بإنشاء رمز مميز يتم نقله إلى الواجهة الخلفية. تتحقق الواجهة الخلفية بعد ذلك من شرعية الرمز المميز، وإذا كان الأمر كذلك، تنفذ الإجراء.

قامت Google بعمل رائع في الترويج لخدمتها الخاصة، ولكن لحسن الحظ، هناك بعض البدائل:

  1. hCaptcha. لقد فكرنا في ذلك في البداية، ولكن أسعارها مشابهة تمامًا لأسعار Google الجديدة.
  2. Cloudflare الباب الدوار. نحن من أشد المعجبين بـ Cloudflare، وبالتأكيد بحثنا في الأمر. أما الآن فهي خدمة مجانية.

دعونا نتعمق.

الابتعاد عن Google reCAPTCHA...

إحدى أدواتنا المجانية هي كاتب البريد الإلكتروني بالذكاء الاصطناعي. إنها في الأساس صفحة 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/migrating-from-googles-recaptcha-to-cloudflare-turnstile-17lf?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3