2010-06-05 13 views
12

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

उत्तर

16

सरल उत्तर यह है: आप क्लाइंट से डेटा पर भरोसा नहीं कर सकते हैं, जिसका मतलब है कि उच्च स्कोर जमा ग्राहक से नहीं आ सकता है।

चूंकि कोड क्लाइंट किसी के भी निरीक्षण के लिए उपलब्ध है, क्लाइंट आपके सर्वर को भेजे जाने वाले डेटा पर भरोसा करने का कोई तरीका नहीं है। यहां तक ​​कि यदि आप प्रति उपयोगकर्ता एन्क्रिप्शन कुंजी (जो संभव है) के साथ डेटा एन्क्रिप्ट करते हैं, तो उपयोगकर्ता ब्राउज़र में बस अपना कोड बदल सकता है और सर्वर पर भेजे गए मानों को बदल सकता है।

चूंकि आपका गेम मल्टीप्लेयर है, इसलिए यह संभव हो सकता है कि सर्वर सभी स्कोरिंग ईवेंट उत्पन्न करता है। यदि सर्वर सभी स्कोरिंग घटनाओं को उत्पन्न करता है, तो क्लाइंट सर्वर पर स्कोर डेटा कभी नहीं भेजता है जिसका अर्थ है कि उच्च स्कोर डेटा को फ़ेक नहीं किया जा सकता है।

तुम अब भी धोखाधड़ी, जो और भी अधिक चुनौतीपूर्ण है से निपटने के लिए प्रयास करेंगे, लेकिन एक और मुद्दा है ...

+0

मैं अभी भी उन तरीकों के बारे में सोच रहा हूं जहां स्कोरिंग घटनाएं उत्पन्न करने वाले सर्वर काम कर सकते हैं ... ऐसा लगता है कि अनिवार्य रूप से, क्लाइंटसाइड गेम के लिए इंटरैक्टिव होने के लिए कुछ फीडबैक शुरू कर देगा - जैसे बटन क्लिक करना या दबा देना आखिरकार केवल एक सॉकेट/यूआरएल कॉल में अनुवाद किया जा रहा है, मानते हैं कि प्रत्येक स्कोरिंग प्रक्रिया सर्वर पर भेजी जाती है। चूंकि इस स्कोरिंग ईवेंट को भेजने के लिए यूआरएल खुले में है (और इससे बचने का कोई तरीका नहीं है?), ऐसा लगता है कि लोग यूआरएल को स्क्रैपर सेट करके आसानी से इसका दुरुपयोग कर सकते हैं। किस प्रकार के गेम में केवल सर्वर-सीमित स्कोरिंग घटनाएं हो सकती हैं? – ina

+0

@ina: बहुत अधिक वाणिज्यिक ऑनलाइन गेम सर्वर पर इसके सभी स्कोरिंग करता है। ग्राहक कार्रवाई शुरू करता है लेकिन सर्वर उन्हें हल करता है और परिणाम का फैसला करता है। – Kylotan

+1

@ina: क्या कैयलोटन ने कहा। "स्कोर उत्पन्न करें" ईवेंट नहीं है। एक "खिलाड़ी ने यह कार्रवाई की" घटना है। यदि कोई परिणाम उत्पन्न होने पर कार्रवाई परिणाम होता है, तो सर्वर पर स्कोर उत्पन्न करें। इसका मतलब है कि आपका क्लाइंट सर्वर द्वारा उत्पन्न घटनाओं के प्रदर्शन से अधिक कुछ नहीं है - क्लाइंट पर प्रभावी रूप से कोई गेमप्ले तत्व निष्पादित नहीं होता है, वे सभी सर्वर पर होते हैं और क्लाइंट पर प्रस्तुत किए जाते हैं। –

4

के लिए क्या लैरी कहा पर जोड़ा जा रहा है, आप निश्चित रूप से पर स्कोरिंग को संभालने के लिए करने जा रहे हैं वास्तव में धोखाधड़ी/नकली स्कोर पोस्टिंग को रोकने के लिए बैकएंड।

अभ्यास में इसका एक उदाहरण के लिए ... खेल Word Wars एक boggle-esque गेम है जहां आप 4x4 ग्रिड अक्षरों से जितने शब्दों को प्राप्त कर सकते हैं।

प्रत्येक गेम की शुरुआत में, एक 4x4 बोर्ड सर्वर पक्ष उत्पन्न होता है। उस बोर्ड के लिए संभावित शब्दों की एक सूची उत्पन्न होती है और प्रत्येक शब्द के साथ एक हैश संस्करण (यादृच्छिक नमक के साथ md5'd) साथ ही नमक ग्राहक को पास किया जाता है।

क्लाइंट साइड पर, जब अक्षरों को टाइप किया जाता है और एंटर कुंजी दबाया जाता है, तो हम एमडी 5 (सर्वर से नमक के साथ) शब्द दर्ज करते हैं और सर्वर द्वारा प्रदान किए गए हैंश किए गए शब्दों की सूची के खिलाफ जांचते हैं। यदि यह एक मैच है, तो हम ग्राहक को नए स्कोर के साथ अपडेट करते हैं (उपयोग किए गए अक्षरों और उनके बिंदु मानों के आधार पर एक फ़ंक्शन है)।

एक बार गेम खत्म होने के बाद, क्लाइंट सर्वर के साथ आने वाले शब्दों की सूची भेजता है (स्कोर नहीं), और सर्वर डबल-चेक करता है कि वे शब्द बोर्ड में मौजूद हैं, और स्कोरिंग को संभालते हैं।

यह वह जगह है जहां क्ले.ओ, जिस कंपनी में मैं काम कर रहा हूं, वह है। Clay.io लीडरबोर्ड, उपलब्धियां, भुगतान प्रसंस्करण इत्यादि जैसे उच्च स्तरीय एचटीएमएल 5 गेम सुविधाओं के लिए एक एपीआई प्रदान करता है ... कहने की जरूरत नहीं है, हम उन खेलों के लिए एक समाधान की आवश्यकता है जिनके पास कुछ चीजें जैसे उच्च स्कोर अधिक सुरक्षित बनाने के लिए बैकएंड है।

समाधान जेडब्ल्यूटी (जेएसओएन वेब टोकन) का उपयोग करके बैकएंड (node.js, php, जो कुछ भी) पर जावास्क्रिप्ट ऑब्जेक्ट को एन्क्रिप्ट करना था, और स्कोर के बजाए उस एन्क्रिप्टेड ऑब्जेक्ट को पास करना था। यह हमें दोनों तरीकों से संवाद करने देता है (खेल -> Clay.io और Clay.io -> खेल), और करने के लिए बहुत दर्दनाक है। इस पर पूरी डॉक्स यहां हैं: clay.io/docs/encryption (अधिकतम इस जवाब पर मारा लिंक)

वर्ड वार्स वापस ... सर्वर से हम पैदा करते हैं कि उपयोगकर्ता के स्कोर और पास के साथ जेडब्ल्यूटी कि स्कोर पोस्ट करने के लिए Clay.io पर।देखा :)

बेशक

, इस खेल को आप अलग विकसित कर रहे हैं के प्रकार के रूप में अलग होगा, लेकिन कहानी का नैतिक आप रचनात्मक पाने के लिए :)

मैं एक ब्लॉग पोस्ट को शामिल किया गया एचटीएमएल 5 लिखा है अधिक जानकारी में खेल सुरक्षा। Part 3 of a series on HTML5 Game Development Tips

+0

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

+0

हाँ, वे खेल में हर शब्दकोष शब्द को टॉस करने और कहीं और प्राप्त करने में सक्षम होंगे ... बेशक, आप चेक कर सकते हैं यह देखने में असफल दरें कि कोई वास्तव में ऐसा कर रहा है या नहीं। एक व्यक्ति जिसने 'क्रैक' किया था, वह सिर्फ एक दबदबा सॉल्वर का निर्माण कर रहा था - दुर्भाग्य से उस तरह से कोई रास्ता नहीं (जैसे कि दोस्तों के साथ शब्दों के लिए स्क्रैबल-समकक्ष में इस तरह की चीज़ को रोकने के लिए कोई रास्ता नहीं है) – austinhallock

संबंधित मुद्दे