دورة تطوير نظام إدارة الأعراس والمناسبات ودعوات QR عمليًا

تأمين الروابط والهجمات الشائعة

تأمين الروابط والهجمات الشائعة — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي
وقت الدراسة
14 دقيقة

المسار: تطوير نظام إدارة الأعراس ودعوات QR الوحدة: توليد وقراءة رموز QR

مدخل إلى الدرس: تأمين الروابط والهجمات الشائعة

تأمين الروابط والهجمات الشائعة — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي

طريقة الدراسة: اقرأ التعريف، تتبّع المثال في الشرح، نفّذه بنفسك، ثم اختبر النتيجة والحالات الاستثنائية قبل الانتقال.

أهداف هذا الدرس

  • مراجعة ثغرات: التخمين، إعادة الإرسال، الغش بوقت.
  • إضافة نافذة صلاحية للرابط وختم per-token secret.
  • طريقة محو أو إبطال QR بعد الحفل بلحظة.

المخطط: خريطة هجمات على روابط الدعوة ودفاعاتها

flowchart LR
    A["تخمين token"] --> D1["randomBytes(24) → 192-bit"]
    B["تخمين sig"] --> D2["HMAC بمفتاح سري غير مفشى"]
    C["إعادة إرسال same token"] --> D3["منع CheckIn مزدوج + نافذة صلاحية"]
    E["فتح الرابط بعد الحفل"] --> D4["مقارنة تاريخ الحدث → 410"]
    F["استنساخ صورة QR"] --> D5["طباعة بالاسم + التوقيع لكل ضيف"]
    G["رفع sig طولية"] --> D6["timingSafeEqual متساوي الأمد"]

مثال

// تحقق "الزمن" في واجهة الدعوة والفحص معاً
export function invitationActive(eventDate: Date, now = new Date()) {
  return now.getTime() < eventDate.getTime() + 24 * 60 * 60 * 1000;
}

// في POST /api/checkin بعد التوقيع:
const event = await prisma.event.findUnique({ where: { id: eventId } });
if (event && !invitationActive(event.date)) {
  return NextResponse.json(
    { ok: false, error: "انتهت صلاحية دعوة هذا الحدث" },
    { status: 410 }
  );
}

نافذة انتهاء مضمونة

لا تجعل السريان عاماً عبر مناسبات متعددة: نربط صلاحية كل رابط بتاريخ الحدث، أي الرموز تموت تلقائياً بعد الحفل مهما تسربت.

تمرين تطبيقي: صمّم جدول revocations بسيطاً (guestId، reason، time) وأضف فحصه قبل قبول الحضور، ثم جرّب إبطال ضيف وإعادة مسح رمزه — يجب أن يرفض النظام.

أخطاء شائعة يجب تفاديها

  • قبول رمز بعد الحدث بلا نافذة — يتسرب للحفلات المستقبلية.
  • مقارنة sig نصاً بسيطاً يفتح استخراج زمني متداول.
  • عدم إبطال سريع عند إلغاء دعوة — يظل الرمز يعمل حتى بقائه.

معجم مصطلحات الدرس

نافذة صلاحية
فترة زمنية يُقبل فيها الرمز؛ بعدها يُرفض.
410 Gone
رمز HTTP يشير لانتهاء أبدية للموارد.
إبطال
قرار نظام يوقف شرعية رسم أو رمز معيّن.

مراجعة وتمرين تثبيت المهارة

اختبار سريع: اشرح بعبارتك معنى «تأمين الروابط والهجمات الشائعة»، ثم بيّن أين ستستخدمه داخل نظام تسجيل حضور دعوات مناسبة عبر رمز QR، وما الخطأ الذي يجب اختباره قبل الاعتماد على الحل.

تحدٍّ إضافي: غيّر شرطًا واحدًا في التطبيق، وتوقع النتيجة، ثم نفّذ الاختبار وفسّر الاختلاف.

دروس نصية

#1

نظرة عامة على الدورة والمخرجات

#2

مقدمة إلى Next.js وأسباب اختياره

#3

أساسيات schema.prisma والنماذج

#4

مقدمة Route Handlers وبنية الاستجابة

#5

فهم Server Components والجلب الآمن

#6

تصميم الرمز Secured والتوقيع HMAC

#7

بناء الإنتاج وتجنّب أخطاء الحالة المربكة

#8

تحليل المتطلبات وتحديد الكيانات

#9

إنشاء مشروع Next.js وتجربته

#10

نموذج المناسبة Event بالعلاقات

#11

واجهة إنشاء المناسبة POST /api/events

#12

تصميم صفحة الدعوة الإلكترونية

#13

توليد صورة QR من قاعدة الدعوة

#14

نشر المشروع على Vercel

#15

تصميم قاعدة البيانات والعلاقات

#16

تجريب PostgreSQL محلياً وإنشاء قاعدة الداتا

#17

نموذج المدعو Guest مع الرمز الموقّع

#18

واجهات الضيوف الإضافة والقائمة

#19

نموذج الرد RSVP التفاعلي

#20

تجربة المسح في بوابة الحفل

#21

قاعدة بيانات إنتاج مُدارة وأمانها

#22

تدفق الدعوة وقراءة QR من التوليد إلى الحضور

#23

تثبيت Prisma والاتصال بالقاعدة

#24

نموذج الرد Rsvp ومنع التكرار

#25

واجهة تسجيل الحضور POST /api/checkin

#26

صفحة قائمة الضيوف والفرز

#27

واجهة تتفهم حالة الحضور والحصر

#28

إدارة المتغيرات السرية بيئة وواجهة

#29

سيناريو المشروع وقواعد العمل

#30

بنية مجلدات المشروع ومسارات الصفحات

#31

الاستعلام والجلب مع العلاقات

#32

التحقق من المدخلات ومعالجة الأخطاء

#33

لوحة الإحصائيات الحية

#34

تأمين الروابط والهجمات الشائعة

#35

قائمة الفحص النهائي قبل الإطلاق

#36

الترحيلات migrations والبذور seed

عرض الدروس كاملة تحقق من صفحة تعلم الدورة
درس نصي 5/36
أنت تشاهد
تأمين الروابط والهجمات الشائعة