سؤال

أنا أعمل على الواجهة الخلفية للعبة فلاش وأحتاج إلى ذلك يؤمن البيانات التي تدخل إلى لوحة النتائج.

ستتم استضافة اللعبة على العديد من المواقع في إعلان بانر، وسيلعب المستخدم اللعبة في الإعلان ثم ينقر للوصول إلى الموقع الرئيسي لحفظ التفاصيل الخاصة به.

في هذه اللحظة أفكر على هذا المنوال

  1. يلعب المستخدم اللعبة وينقر لإرسال درجاته
  2. في الخلفية، يرسل الشعار النتيجة والمجال الأصلي إلى برنامج نصي على الموقع الرئيسي.
  3. يتحقق البرنامج النصي من أن المجال هو أحد النطاقات الصالحة التي تتم استضافة الإعلان عليها.
  4. إذا كان كل شيء على ما يرام، يقوم البرنامج النصي بإنشاء تجزئة لهذه النتيجة والمجال ويخزنها في قاعدة البيانات بجانب النتيجة.
  5. يقوم البرنامج النصي بإرجاع التجزئة إلى Flash الذي يقوم بتجميعها في سلسلة استعلام getURL التي تفتح لوحة النتائج الرئيسية
  6. تتحقق صفحة لوحة النتائج من المُحيل للتأكد من أنه أحد النطاقات الصالحة.
  7. إذا كان الأمر كذلك، فتحقق من قاعدة البيانات بحثًا عن التجزئة للتأكد من أنها رمز مميز صالح
  8. يقوم المستخدم بعد ذلك بملء التفاصيل الخاصة به ويتم تحديث السجل بناءً على التجزئة

آخر مرة قمت فيها بالتحقق من أن برنامج FLash لا يرسل معلومات مرجعية، الأمر الذي يلقي بمفتاح ربط في خطتي.إذًا، هل يوجد نمط محدد بالفعل لهذا النوع من التفاعل بين الفلاش وقاعدة البيانات؟

ما نوع التجزئة/المجموع الاختباري الذي يجب أن أستخدمه في الخطوة 4؟ما هو الاسم الصحيح لهذا النوع من العمليات، هل هي تجزئة أم مجموع اختباري أم أي شيء آخر؟

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

تحديث:هدفي الرئيسي هو أن أجعل من الصعب على الأشخاص العثور على عنوان URL الخاص بالبرنامج النصي الذي يضيف النتيجة إلى قاعدة البيانات ثم إرسال بريد عشوائي إليها باستخدام نتائج مزيفة.

شكرا ، جريج

هل كانت مفيدة؟

المحلول

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

والطريقة التي تم بها ذلك كانت:

  1. توليد رقم عشوائي كملح (من الفلاش)
  2. تشفير النتيجة باستخدام العمليات الحسابية، بناءً على الملح (من الفلاش)
  3. أضف مجموعًا اختباريًا للتأكد من عدم وجود أي تقلب في النتيجة (من الفلاش)
  4. أرسل النتيجة وأي بيانات مطلوبة إلى صفحة إرسال النتيجة
  5. على الخادم، تحقق من أن النتيجة لم يتم تخفيفها باستخدام المجموع الاختباري
  6. إذا كانت النتيجة صحيحة، فأدخلها في قاعدة البيانات، وإلا ارفضها
  7. إذا كنت تريد ذلك، يمكنك تسجيل عناوين IP الخاصة بمرسلي الدرجات التي تنتهك المجاميع الاختبارية (ربما تكون سياسة المجاميع الاختبارية الثلاثة السيئة، أنت خارج الخدمة) وإضافة برنامج نصي لمنعهم من الوصول إلى الخادم لمدة ساعة واحدة، لكن هذا لن يحدث على الأرجح تكون مطلوبة إلا إذا أراد شخص ما كسر التعليمات البرمجية الخاصة بك بهذا السوء.

ملحوظة :تم إجراء التجزئة/المجموع الاختباري باستخدام وظيفة مخصصة.لم أكن بحاجة إلى شيء آمن للغاية.تم صنعه باستخدام حساب الملح والنتيجة.- بعض العمليات الحسابية البسيطة مثل الجمع والضرب والطرح.


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

لنفترض أن المستخدم الخاص بك لديه درجة 5885.
يمكنك إنشاء رقم عشوائي كملح 134789 (طول ثابت، لوحة مع 0)

cryptedScore = نتيجة * ملح (يجب عليك استخدام شيء أكثر تعقيدًا هنا، ولكنه مجرد مثال)

في مثالنا، النتيجة المشفرة ستكون: 793233265

الآن بالنسبة للمجموع الاختباري، لنفترض أنك تريد الحصول على قيمة 253 كمجموع اختباري.
يمكنك إضافة جميع أرقام درجاتك المشفرة 7+9+3+2+3+3+2+6+5 = 40

الآن، يمكنك حساب قيمة المجموع الاختباري لهذه النتيجة
253 - (مجموع أرقام الدرجات المشفرة٪ 253)

والآن لدينا الأرقام التالية:
الملح = 134789
النتيجة المشفرة = 793233265
المجموع الاختباري = 40

يمكنك تقديم طلب إلى الخادم، وإرسال 134789793233265040 كنتيجة.

على خادم النتيجة، يمكنك تقسيم 793233265 بواسطة 134789 إعطاء 5885 والتحقق من صحة المجموع الاختباري باستخدام نفس الوظيفة كما كان من قبل.

إذا فشل المجموع الاختباري، فهذا يعني أنه تم التلاعب بالأرقام.

من المحتمل أن ينتهي بك الأمر إلى شيء أكثر أمانًا، لكنه سيفي بالغرض.

نصائح أخرى

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

إليك بعض الأشياء التي يمكنك تجربتها:

  • قم بتسجيل المدخلات في اللعبة وأرسلها مع النتيجة.يمكن للخادم بعد ذلك التحقق من أن النتيجة تتوافق مع لعبة محتملة.يمكنك أيضًا اكتشاف عمليات الإرسال المكررة بهذه الطريقة.
  • تطبيق تحديد المعدل لمنع العملاء من تقديم النتائج بوتيرة غير إنسانية بشكل واضح.قم بتطبيق الحدود العليا على الدرجات المسموح بها بناءً على ما يمكن تحقيقه فعليًا وحدودًا أقل على أشياء مثل الإجراءات في الثانية.
  • استخدم المدخلات السابقة لزرع مولد الأرقام العشوائية الزائفة جزئيًا (بافتراض أنك تستخدم واحدًا).وهذا يجعل من غير المرجح أن يتمكن العملاء من تعديل الإرسال قليلاً مع الاستمرار في الحصول على مجموعة صالحة للعبة/النتيجة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top