क्लाइंट-साइड खेल परिणामों की पुष्टि के लिए एक सुरक्षित, "कम लागत" विधि को डिजाइन करने के लिए विचार

वोट
3

यह एक कोडन सवाल से, और अधिक एक प्रणाली डिजाइन प्रश्न / चुनौती है।

मूल रूप से, मैं एक साथ फेंकने की सोच रहा हूँ Bejeweled बस HTML, सीएसएस, और जावास्क्रिप्ट का उपयोग कर फेसबुक पर -esque खेल। यह ज्यादातर एक गैर तुच्छ परियोजना के माध्यम से FBJS के सभी छोटे चेतावनियां जानने के लिए की इच्छा के चलते है।

तो यहाँ सौदा है। जब फेसबुक के लिए विकसित करने, वास्तविक API कॉल बहुत महंगे हैं; न केवल वहाँ फेसबुक सर्वरों के लिए एक अतिरिक्त पद भी के एपीआई कॉल सीमा और के बारे में चिंता थ्रॉटल है। संक्षेप में, फेसबुक पर कम कॉल बेहतर। यहां तक ​​कि इस सरल पहेली खेल के समय समस्या होने पर इस गठबंधन है, और वहाँ अच्छा कारण आक्रामक तरीके से सामान्य रूप में कॉलबैक की संख्या को कम करने के लिए है।

नहीं एक सुरक्षा विशेषज्ञ जा रहा है, यहाँ डिजाइन मैं के साथ आ गया है:

  1. खेल पृष्ठ में एक यादृच्छिक बीज एम्बेड करें।
  2. (आवश्यकतानुसार के साथ ही अतिरिक्त टुकड़े) खेल बोर्ड बनाने के लिए है कि बीज का प्रयोग करें।
  3. बीज (XOR, CONCATENATE और हैश, ऐसा ही कुछ) प्रत्येक खिलाड़ी चाल के बाद, पिछले चाल के बाद से समय के आधार पर दें। संपादित करें: मैं शायद यह भी वास्तविक कदम बीज परिवर्तनशील में लिया शामिल होना चाहिए।
  4. खेल पूरा होने पर निम्नलिखित वापस पोस्ट: खेल समय शुरू, प्रत्येक चाल लिया और जब, और क्लाइंट साइड का परिणाम है।
  5. सर्वर पर, दिए गए आंकड़ों के साथ खेल को फिर से चलाने, विवेक प्रारंभ समय की जाँच और समय ले जाते हैं, और उसके बाद इस बात की पुष्टि है कि परिणाम मैच।
  6. सेवा से वंचित कम करने के लिए, खेल ही बारी एक्स हालत से एक जीत के लिए बदलाव कर दिया जाएगा।
  7. सर्वर एक तरह की दैवज्ञ के रूप में इस्तेमाल किया जा रहा हतोत्साहित करने के लिए, यदि कोई उपयोगकर्ता वापस पोस्टिंग गलत खेल कुछ निरंतर समय एक्स के लिए प्रतिबंधित कर दिया जाएगा (एक्स मिनटों के अंतराल पर किया जा रहा है)।

एक यादृच्छिक बीज स्टोर करने के लिए इससे पहले कि खेल खेला जाता है, एक यह लाने के लिए के बाद खेल समाप्त हो गया है, और एक खिलाड़ी के स्कोर अद्यतन करने के लिए करता है, तो खेल मान्य है: इस डिजाइन खेल प्रति तीन फेसबुक कॉल खेला आवश्यकता है।

(क्या मैं सबूत के खिलाफ प्रणाली कोशिश कर रहा हूँ सीधे स्कोर स्पूफिंग निर्भर है ?: // ... myscore = 999999999 http , या समान)। मैं भी कम करने के लिए आगे देखने के लिए हमलों, जिसमें उपयोगकर्ता क्या टुकड़े अगले बोर्ड में आ रहे हैं बता सकते हैं करना चाहते हैं। होस्टिंग सर्वर (जानबूझकर या अन्यथा) पर सेवा हमलों से वंचित करना भी रोका जाना चाहिए।

वास्तविक सवाल है, किसी को भी इस डिजाइन में एक दोष देख सकते हैं? तुल्य, वहाँ एक सरल डिजाइन है कि मेरे मानदंडों को पूरा करती है?

नोट: मैं वाकिफ हूँ कि यह कैसे अनावश्यक शायद है, लेकिन इसके एक दिलचस्प सवाल कोई भी कम।


मैं कोशिश करते हैं और मेरी तर्क वर्णन आगे चल करने के लिए यहाँ कुछ संख्या फेंकने के लिए जा रहा हूँ, इन सुंदर किसी न किसी तरह कर रहे हैं, लेकिन मैं उपयोगी उम्मीद है।

एक 10x10 खेल बोर्ड मान लिया जाये, वहाँ ~ 200 संभावित चालें (दो आसन्न टुकड़े गमागमन) जिनमें से अधिकांश अमान्य हैं कर रहे हैं। मान लीजिए कि वहाँ प्रति बारी औसत 5 वैध चाल पर हैं करते हैं। अगर हम 50 30,000 से मिलीसेकेंड के फ्रेम करने के लिए खिलाड़ी कार्रवाई बाधित करते हैं, वहाँ 149,750 संभावित नए फेरबदल एल्गोरिथ्म बिट्स त्यागने नहीं है प्रदान की हैश कर रहे हैं; मैं कहना में आत्मविश्वास लगता है कम से कम 10,000 संभावित नए हैश एक हमलावर एक क्रिप्टोग्राफी द्वारा सुरक्षित हैश संभालने द्वारा गणना की जानी चाहिए जो प्रयोग किया जाता है देखते हैं। आप बहुत जल्दी अपने निर्णय पेड़ फट इस पर एक न्यूनतम-अधिकतम एल्गोरिथ्म फेंक है। इस पर एक खेल सत्र की समाप्ति फेंक, 30 मिनट का कहना है, और मैं हमले क्योंकि आप जो यथोचित के खिलाफ बचाव नहीं किया जा सकता है के लिए खेलने के लिए एक छोटे से बॉट प्रोग्राम लिखने के लिए जटिलता में बराबर विश्वास करते हैं।

26/05/2009 को 22:04
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
3

ग्राहक कोड अगले टुकड़ा गणना करता है और आप इस एल्गोरिथ्म नहीं छुपा सकते बहुत अच्छी तरह से करते हैं, तो कुछ ऊब कॉलेज के छात्र यह पता लगा होगा। नतीजतन, वे एक बड़े पैमाने पर स्कोर पैदा करते हैं और अपने इरादों को हराने के लिए सक्षम हो जाएगा।

26/05/2009 को 22:14
का स्रोत उपयोगकर्ता

वोट
0

मैं कहना है कि यह करने के लिए असंभव है करते हैं। क्यूं कर? आप ग्राहक पर भरोसा नहीं कर सकते हैं - मैं तो बस का विश्लेषण करने और पूरी तरह से ग्राहक के पक्ष कोड को फिर से लिखने और वापसी जो कुछ मूल्यों मुझे पसंद कर सकते हैं। ग्राहक सिर्फ उपयोगकर्ता इनपुट को इकट्ठा करने और सर्वर उत्पादन प्रदर्शित करेगा - धोखाधड़ी और हमलों के सभी प्रकार से बचाने के लिए एक ही रास्ता सर्वर पर तर्क प्रदर्शन करने के लिए है। लेकिन इस अपने डिजाइन लक्ष्य सर्वर कॉल की संख्या को कम करने के खिलाफ पूरी तरह से है।

26/05/2009 को 22:20
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more