MAISON CODE .
/ Security · Middleware · Token Gating · Membership

البرمجيات الوسيطة لحفظ البوابة: بوابة الرمز المميز والعضويات

كيفية إنشاء مجموعات "NFT Access" أو "VIP Only" باستخدام Edge Middleware في Remix. حظر الطلبات قبل وصولها إلى الخادم.

AB
Alex B.
البرمجيات الوسيطة لحفظ البوابة: بوابة الرمز المميز والعضويات

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

لماذا تتحدث Maison Code عن هذا

في Maison Code Paris، نعمل كضمير معمari لعملائنا. غالبًا ما نرث حزمًا “حديثة” تم بناؤها دون فهم أساسي للحجم.

نناقش هذا الموضوع لأنه يمثل نقطة تحول حاسمة في النضج الهندسي. التنفيذ الصحيح يميز MVP الهش عن منصة مؤسسية مرنة يمكنها التعامل مع حركة مرور الجمعة السوداء.

نمط الوسيطة الحافة

في Remix/Next.js، تعمل البرامج الوسيطة على كل طلب.

// app/entry.server.tsx (أو middleware.ts)
استيراد { إعادة توجيه } من '@remix-run/node'؛

تصدير وظيفة غير متزامنة checkAccess(request, user) {
  const url = new URL(request.url);
  
  // 1. تحقق مما إذا كان الطريق محميًا
  إذا (url.pathname.startsWith('/collection/vip')) {
    
    // 2. تحقق من تسجيل الدخول
    إذا قام (! المستخدم) برمي إعادة التوجيه('/الحساب/تسجيل الدخول');
    
    // 3. تحقق من العلامة/الرمز المميز
    علامات ثابتة = علامات المستخدم || [];
    const hasVipTag =tags.includes('VIP_TIER_1');
    const hasNft = انتظار checkWallet(user.wallet, 'BORED_APE');
    
    إذا (!hasVipTag && !hasNft) {
      رمي إعادة التوجيه('/صفحات/تم رفض الوصول');
    }
  }
}

بوابة الرمز المميز (Web3)

بالنسبة للعلامات التجارية NFT، فإن “تسجيل الدخول” هو اتصال Wallet. نحن نستخدم SIWE (تسجيل الدخول باستخدام Ethereum).

  1. ينقر المستخدم على “الاتصال بالمحفظة”.
  2. علامات nonce.
  3. يتحقق الخادم من التوقيع.
  4. يستعلم الخادم عن عقدة Blockchain (Alchemy/Infura): “هل تمتلك Wallet X الرمز Y؟”
  5. إذا كانت الإجابة بنعم، قم بإصدار ملف تعريف ارتباط الجلسة.

الحماية بكلمة مرور (بسيطة)

في بعض الأحيان تحتاج فقط إلى كلمة مرور للمجموعة. لا تستخدم صفحة كلمة المرور العالمية الخاصة بـ Shopify. أنشئ كلمة مرور ذات نطاق. قم بتخزين تجزئة كلمة المرور في حقل تعريف المجموعة. يقوم المستخدم بإدخال كلمة المرور -> التحقق من التجزئة -> تعيين ملف تعريف الارتباط collection_access_123=true -> السماح بالوصول.

البوابات الجغرافية

“لا يمكن بيع هذا المنتج في كاليفورنيا.” (تنظيمية). حدد “request.cf.region” (Cloudflare) أو “request.geo.city” (Vercel). إذا كانت المنطقة === 'CA'، قم بإخفاء زر “أضف إلى سلة التسوق” أو قم بإعادة التوجيه.

5. التحكم في الوصول المستند إلى الدور (RBAC) عند الحافة

“يمكن للمسؤولين رؤية /dashboard. ولكن لا يمكن للمستخدمين.” عادة، يمكنك التحقق من ذلك في مكون الخادم. ولكن هذا يهدر وحدة المعالجة المركزية. التحقق من ذلك في الوسيطة. قم بتخزين الأدوار في JWT (user.roles = ['admin']). تقوم البرامج الوسيطة بفك تشفير JWT (تجاهل التحقق من التوقيع للسرعة، أو التحقق باستخدام التشفير المتوافق مع Edge). إذا كان الدور ! = admin، قم بإرجاع 403 Forbidden على الفور. وهذا يحمي واجهة برمجة التطبيقات الخلفية الخاصة بك من التحقيق غير المصرح به.

6. حماية الروبوت (البوابة الدوارة Cloudflare)

الوسيطة هي المكان المثالي لإيقاف الروبوتات. إذا كان “وكيل المستخدم” هو “HeadlessChrome”، فاحظره. إذا كانت قيمة cf-bot-score <30، قم بالحظر. نقوم بإدخال Cloudflare Turnstile (Smart Captcha) خصيصًا للطلبات المشبوهة. المستخدم العادي لا يرى شيئا. يرى الروبوت تحديًا. يحدث هذا حتى قبل أن يتم لمس قاعدة البيانات الخاصة بك.

8. اختبار أ/ب من جانب الخادم

يؤدي اختبار A/B من جانب العميل (Google Optimize) إلى ظهور “الوميض”. يرى المستخدم العنوان القديم لمدة 0.5 ثانية، ثم يقوم بالتبديل. الوسيطة تحل هذا.

  1. يأتي الطلب.
  2. تقوم البرامج الوسيطة بفحص “مجموعة ملفات تعريف الارتباط”. إذا كان فارغًا، قم بتعيين bucket=B.
  3. أعد كتابة الطلب إلى /variants/home-b.
  4. يعرض الخادم البديل ب.
  5. يرى المستخدم البديل ب على الفور. وميض صفر. آمن لتحسين محركات البحث (إذا تمت إدارة العناوين الأساسية).

9. التسعير الشخصي على الحافة

“يحصل مستخدمو VIP على خصم 20%.” إذا قمت بذلك في Client JS، فسيقوم المتسلل بتغيير المنطق فقط. إذا قمت بذلك في البرامج الوسيطة، فهو آمن.

  1. ترى البرامج الوسيطة user_tier=vip.
  2. تقوم البرامج الوسيطة بإدخال العنوان “x-pricing-tier: vip”.
  3. يقدم Origin Server مبلغ 80 دولارًا بدلاً من 100 دولار. يصل HTML بالسعر الصحيح. لا يمكن للمستخدم التعامل معها.

10. تخفيف آثار هجمات DDoS على طبقة التطبيق

تتم معالجة شبكة DDoS بواسطة Cloudflare. تطبيق DDoS (الطبقة 7) أصعب. “ابحث عن “a” 1000 مرة في الثانية.” (يقتل قاعدة البيانات). الوسيطة هي المرشح. نقوم بتنفيذ تحديد معدل دلو الرمز المميز لكل عنوان IP قبل عرض الريمكس. const المسموح به = انتظار معدلLimit.check(ip, 10, "10s"); إذا تجاوزت 10 طلبات في 10 ثوانٍ، فسيتم إرجاع 429 طلبًا كبيرًا جدًا. خادم العرض الخاص بك لا يستيقظ أبدًا.

11. قائمة الانتظار (غرفة الانتظار الافتراضية)

بالنسبة إلى “Hyped Drops” (Yeezy/Supreme)، لا يمكن لأي خادم التعامل مع الارتفاع. تقوم البرامج الوسيطة بإعادة توجيه حركة المرور إلى قائمة الانتظار الافتراضية (Queue-it أو Custom Redis).

  1. حدد “queue_token”. مفتقد؟
  2. إعادة التوجيه إلى /قائمة الانتظار.
  3. ينتظر المستخدم. يقوم WebSocket بتحديث الموضع “أنت رقم 5000”.
  4. يصل المستخدم إلى الأمام. أعد التوجيه إلى /product?token=xyz.
  5. تقوم البرامج الوسيطة بالتحقق من صحة الرمز المميز. يسمح بالوصول لمدة 10 دقائق. يؤدي هذا إلى تسوية منحنى حركة المرور من “الارتفاع” إلى “الهضبة”.

12. توقيع HMAC لـ B2B

إذا كان لديك متجر B2B، فغالبًا ما يكون لديك رابط “بوابة” من نظام تخطيط موارد المؤسسات (ERP). ينقر المستخدم على الرابط في NetSuite -> تم تسجيل الدخول إلى Shopify. كيف يمكنك تأمين هذا الرابط؟ HMAC (رمز مصادقة الرسالة المستند إلى التجزئة). يحتوي الرابط على ?user=123&timestamp=17000000&signature=abc.... تتحقق البرامج الوسيطة من التوقيع باستخدام سر مشترك. إذا كان “الطابع الزمني” أكبر من 5 دقائق، قم بالرفض. وهذا يسمح بتسجيل الدخول “بدون كلمة مرور” وهو آمن من الناحية المشفرة.

11. لماذا ميزون كود؟

في Maison Code، نحن ننظر إلى البرامج الوسيطة باعتبارها الدرع. وهو خط الدفاع الأول. نحن لا نترك منطق عملك المحدد مكشوفًا في JS من جانب العميل. ننقل التعقيد إلى الحافة. قمنا ببناء متاجر “Token Gated” لمشاريع NFT و”VIP Tiers” لدور الأزياء الفاخرة. نحن نعرف كيفية منع الروبوتات أثناء بسط السجادة الحمراء لكبار الشخصيات.

13. الكشف المتقدم عن الروبوتات (الاستدلالات)

أصبحت الروبوتات أكثر ذكاءً. ينفذون JS. يجتازون كلمة التحقق (باستخدام المزارع). نحن بحاجة إلى التحليل السلوكي على الحافة.

  1. حركة الماوس: تتحرك الروبوتات في خطوط مستقيمة. يتحرك البشر في منحنيات.
  2. الوقت المستغرق في الصفحة: يتم شراء الروبوتات خلال ثانيتين. يستغرق البشر 20 ثانية.
  3. رؤوس الطلبات: غالبًا ما تكون الروبوتات غير متطابقة مع User-Agent وSec-CH-UA. نحن نستخدم منطق Cloudflare Worker لتسجيل هذه الطلبات. النتيجة < 10؟ إعادة التوجيه الصامت إلى الخروج “Honeypot” الذي يفرض عليهم رسومًا ولكن لا يشحن شيئًا. وهذا يهدر أموالهم ويثنيهم عن مهاجمتك مرة أخرى.

14. سياج جغرافي للامتثال للترخيص

أنت تبيع نايكي. يُسمح لك بالبيع في الاتحاد الأوروبي، ولكن ليس في الولايات المتحدة. لقد فات الأوان للتحقق من صحة “منتقي العنوان”. يرى العميل الأمريكي المنتج، ويضيفه إلى سلة التسوق، ويتم رفضه عند الدفع. إنهم غاضبون. Edge Geo-Fencing يخفي المنتج بناءً على IP. إذا كان `cf-ipcountry == ‘US”، فإن صفحة المنتج تعرض 404. المستخدم لا يعرف بوجوده أبدًا. وهذا يحمي اتفاقية ترخيص البائع الخاصة بك ويمنع القدرة على التصدير في “السوق الرمادية”.

15. قائمة مراجعة البرامج الوسيطة (جاهزية الإطلاق)

لا تنشر البرامج الوسيطة دون التحقق مما يلي:

  1. فشل مفتوح مقابل فشل مغلق: في حالة وجود أخطاء في البرامج الوسيطة، هل تقوم بحظر الجميع أم السماح للجميع بالدخول؟ (افتراضي: فشل مغلق للأمان).
  2. المهلة: قم بتعيين مهلة قدرها 50 مللي ثانية. إذا كان KV بطيئًا، فلا تعلق الصفحة.
  3. التحقق من المنطقة: هل تم اختبارك عبر VPN من بلد محظور؟
  4. رمز التجاوز: هل لديك معلمة استعلام ?token=admin_bypass للوصول في حالات الطوارئ؟
  5. قواعد التخزين المؤقت: تأكد من تعيين Vary: Cookie بحيث لا تقوم بتخزين صفحة “تم رفض الوصول” مؤقتًا للجميع.
  6. ** التسجيل **: قم بتسجيل كل كتلة في Datadog.
  7. ** وكيل المستخدم **: قم بإدراج Googlebot في القائمة البيضاء (التحقق من وكيل المستخدم).
  8. ** حد السعر **: هل الحد لكل عنوان IP أم لكل جلسة؟
  9. الأصول الثابتة: تجاوز البرامج الوسيطة لـ .jpg، .css، .js.
  10. معالجة الاستثناءات: كتلة حاول/التقط حول كل شيء.
  11. البدء البارد: تحقق من أن التشغيل البارد لـ WASM أقل من 10 مللي ثانية.
  12. التكلفة: مراقبة الدعوات. تعمل البرامج الوسيطة على كل طلب.
  13. حلقة إعادة التوجيه: تأكد من عدم إعادة التوجيه إلى صفحة محمية.
  14. تطبيق الهاتف المحمول: هل تقوم برمجيتك الوسيطة بكسر استدعاءات واجهة برمجة تطبيقات تطبيق iOS؟
  15. خريطة الموقع: لا تخفي sitemap.xml.

16. الاستنتاج

حراسة البوابة تخلق الندرة. الندرة تخلق القيمة. لكن البوابة يجب أن تكون آمنة. إخفاء زر عبر CSS (display: none) ليس أمرًا آمنًا. يمكن لأي شخص فحص العنصر. الوسيطة هي الطريقة الوحيدة. إنه سريع وغير مرئي وغير قابل للكسر.


هل تحتاج إلى قطرات حصرية؟

نحن نصمم أنظمة مراقبة الدخول عالية الأمان.

احمي قطرتي. قم بتوظيف مهندسينا.