php - اقتراحات ل (شبه) تأمين درجات عالية في فلاش / لعبة فب





flash actionscript-3 actionscript (7)


لقيمة قصيرة يبعث على السخرية (أي: القيم <64 حرفا)، MD5 كما التجزئة يصبح غير فعال بسبب هجمات الجدول قوس قزح، وكما سيتم إرسال القيمة التي ترسلها عبر السلك، كل ما عليك القيام به هو القوة الغاشمة سر مشترك (ولديهم منتج معروف للعمل معه)

على هذا النحو، هذا المفتاح العام ليس المفتاح الخاص. سرها المشترك ببراعة.

أيضا، نضع في اعتبارنا هذا السر المشترك سيكون في ملف الفلاش الذي ترسله إلى المستخدم، والتي في هذه الأيام ويتم تفكيكها تافهة ثم الخاص بك "السري" ليس سرا أي أكثر من ذلك.

كنت تريد آلية أكثر التحدي والاستجابة مع توقيع التشفير السليم، حيث يتم تعيين مفتاح علامة جديدة لكل لعبة من الخادم، وعشرات متعددة لا يمكن تقديمها مع نفس مفتاح التوقيع. (للحصول على حماية إضافية؛))

  1. يبدأ المستخدم اللعبة. مطلوب مفتاح تسجيل. (يتم إنتاج مفتاح علامة من مفتاح آخر التي لا يمكن الوصول إليها).
  2. يتم تسجيل نقاط مع مفتاح علامة، ومن ثم إرسالها
  3. تحقق من قيمة العلامة باستخدام المفتاح الذي أرسلت إليه.
  4. يمكنك تجاهل مفتاح التوقيع الذي أرسلته لهم.

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

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

جانب العميل - 1. يتم تخزين مفتاح داخل فلاش سوف التي يتم تشفيرها باستخدام أداة 3rd الطرف. 2. يتم تحجيم درجة عالية جنبا إلى جنب مع قيمة عالية درجة (إكس: md5 ('أورسكريتكي' + 200)) 3. يتم إرسال هذه القيمة عبر أمف إلى النصي فب على الخادم، جنبا إلى جنب مع درجة عالية (200)

جانب الخادم - 1. يتلقى الخادم البيانات وتجزئات مرت درجة عالية (200) + مفتاح السري ('أورسكريتكي' المخزنة على الخادم وكذلك في فلاش) والشيكات ضد تجزئة مرت إذا كانت القيمة هو تطابق أنها تسمح درجة عالية ليتم إدخالها، وإلا فشل.

وأنا أعلم أن هذا ليس حلا مضمونا ولكن هذا سيكون مقبولا؟ أعني أن يكون هذا الأمن كافية على شكل درجة عالية لعبة بسيطة على الانترنت فلاش؟ أفكار؟

شكرا لكم مقدما!




هناك واحد فقط 100٪ طريقة عمل تشفير عشرات: تسجيل اعادتها.
ولكن ليس فقط أي اعادتها، من الناحية المثالية يجب عليك فقط تسجيل المطابع مفتاح المستخدم والفضاء بينهما. وبهذه الطريقة، حتى لو كان شخص العبث بالمصدر أو حيوي مع ذاكرة الوصول العشوائي، اعادتها على الملقم سوف تجد المشكلة.
ويتطلب هذا الحل، للأسف، قدرا هائلا من العمل. للبساطة يمكنك فقط التحقق من صحة يدويا جميع الدرجات (أو أفضل الدرجات) وكنت سعيدا. ومع ذلك لا يزال لديك لتجنب بعض الأشياء:

  • مولد عشوائي الافتراضي، تحتاج مولد مبذر الذي يعطي دائما نفس الأرقام العشوائية للبذور معين؛
  • لا توقيت دلتا، آسف؛
  • الدوال المثلثية المخصصة (أنا لست متأكدا 100٪، سمعت مرة واحدة أنها يمكن أن تعطي نتائج مختلفة قليلا على أجهزة الكمبيوتر المختلفة).

وربما أكثر.
غير أن هذا الدفاع غير قابل للكسر. ويأخذ الوقت الكود: D.




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

استخدام سوف سوف تشفير المرجح أن تجعل من الصعب قليلا لاستخراج المفتاح، ويمكن أن يكون أداة جيدة لاستخدام حتى في نظام أكثر تقدما كذلك. ولكن إذا كان لديك مخطط رئيسي عام / خاص حقيقي (على سبيل المثال رسا)، انها حقا نقطة انطلاق لأن المفتاح العمومي ليس سرا، فإنه ليس من المفترض أن يكون. لا يزال لمنع معظم الناس من تحرير الشفرة والتلاعب بنظام النقاط، فإن تشفير سوف ربما يكون خيارا جيدا بما فيه الكفاية.

فقط لجعل لكم أكثر قليلا بجنون العظمة كتبت ما يلي أيضا:

المشكلة مع سوف تشفير، كما هو الحال مع معظم الأدوات الأخرى المماثلة، هو أنه يجب أن يكون من الممكن تنفيذ البرنامج النصي على آلة (ربما للخطر). لذلك يجب أن تكون جميع المعلومات المتاحة على الجهاز المذكور. قارن ذلك مع الاستخدام الكلاسيكي للتشفير، وإرسال الرسائل:

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

مشكلتك بدلا من ذلك أنه في حالتك تثق الوجهة (أنت) ولكن ليس المصدر (العميل) أو العكس بالعكس. لا تزال تحتاج إلى مصدر لتكون قادرة على تشفير الرسالة منذ كنت تثق في الحقيبة حتى أقل. لذلك يحتاج المصدر أن يكون جميع المعلومات لتشفير وفك تشفير الرسائل من أجل العمل. مشكلتك هي أنه لا يمكنك رؤية الفرق بين مصدر "جيد" ومصدر "سيء".

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

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




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

  1. لذلك أطلب المفتاح.
  2. جعل أعلى الدرجات الخاصة بي
  3. تجزئة أعلى الدرجات مع المفتاح.
  4. إرسال أعلى الدرجات إلى الخادم
  5. يستخدم الخادم المفتاح المقدم للحصول على أعلى الدرجات مرة أخرى.



رائع

حلول صعبة جدا 8).

أنا نفذت نظام مثل هذا مرة واحدة. على الرغم من انها لن تعمل لكل مباراة هناك ...

يجب إعادة تشغيل اللعبة على الخادم. عند تشغيل المستخدم - يمكنك تخزين "تغييرات الدولة" ثم ببساطة إطعامها لك لعبة في نوع من "إعادة" واسطة.




الجواب على سؤالك هو، فإنه يعتمد. ذلك يعتمد أساسا من شعبية المقدرة من اللعبة.

من منظور أمني، الحل الخاص بك هو حول آمنة مثل إرسال أعلى الدرجات في نص واضح. ما تفعلونه هنا يسمى الأمن من خلال الغموض، والتي، وفقا لمن تستمع إلى قد يكون لها فوائد في بعض الحالات. في هذه الحالة ربما يكون من المحتمل أن يكون المستخدم العادي قادرا على كسره بنفسه. لأي شخص لديه بعض l33t h4xxor سكيلز قد ترسل كذلك كل شيء في نص واضح. إذا كان كل ما تريده هو إيقاف جو، فمن المحتمل أن يكون ذلك كافيا، على الأقل حتى يقوم شخص ما بإنشاء عميل مزيف لجو لتنزيله (وهذا يتوقف على شعبية اللعبة التي يمكن أن تأخذ أي شيء من بضعة أيام إلى أبدا (أو أسرع إذا كان رائع)).

الحل الأفضل هو الحل الذي قدمهKent فريدريك. ومع ذلك كما تقول أنها لا تحل مشكلة شخص خلق عميل وهمية. قد يكون الحل لذلك شيئا من هذا القبيل:

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

وهذا يضمن شيئين:

  1. النتيجة تأتي من العميل الصحيح.
  2. النتيجة صحيحة فيما يتعلق اللعبة لعبت.

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

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

وأخيرا كان لي فقط للتعليق على اختيارك من خوارزمية التجزئة: MD5 هو خوارزمية التجزئة كبيرة لأولئك الذين لا يزالون يعيشون في التسعينات. بالنسبة لبقية منا أوصي شا-2 أو على الأقل شا-1.




إذا كنت ترغب في القيام بذلك دون ERB ، يمكنك استخدام ما يلي:

Rack::Utils.escape('http://example.com')
#=> "http%3A%2F%2Fexample.com"




php flash actionscript-3 actionscript