मैं अपने सर्वर से HTML5 गेम से स्कोर भेजने की रक्षा कैसे करूं


13

बैकएंड पर मैं जावा का उपयोग कर रहा हूं। मेरे पास HTML5 में एक गेम है; जब उपयोगकर्ता इसे पूरा करता है तो मैं स्कोर को डेटाबेस में सहेजने के लिए एक अजाक्स कॉल भेजता हूं। अब, कोई व्यक्ति इस ajax अनुरोध को संशोधित करने और सर्वर को बहुत बेहतर स्कोर भेजने के लिए आसानी से फ़िडलर और फायरबग जैसे टूल का उपयोग कर सकता है। मैं कैसे सुनिश्चित करूं कि उपयोगकर्ता स्कोर में हेरफेर नहीं कर सकता है!

जवाबों:


18

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

हालाँकि, मैं इसके बारे में बहुत ज्यादा चिंता नहीं करता। ऊपर दिए गए सुझाव इसे और कठिन बना देंगे, लेकिन नकली स्कोर भेजना असंभव नहीं है। हालांकि, अगर आप इसे थोड़ा कठिन बना लेते हैं तो अधिकांश लोग जो आपके खेल को खेलते हैं वे इसे धोखा देने की कोशिश में दिलचस्पी नहीं लेंगे।

इस बारे में सावधान रहें कि आप अपने गेम को अपने सर्वर से कैसे संवाद कर सकते हैं। आप अपने खेल को हैकिंग के लिए अपने सर्वर में एक प्रवेश बिंदु नहीं बनना चाहते हैं। सुनिश्चित करें कि आप हमेशा अपने इनपुट को मान्य करते हैं और कभी भी ग्राहक पर भरोसा नहीं करते हैं।


6
"कभी ग्राहक पर भरोसा न करें" के साथ पूरा करने के लिए प्रोग्रामर.स्टैकएक्सचेंज. com/questions/150127/… और gamedev.stackexchange.com/questions/37392/… देखें
dievardump

@ बाइट्स 56 किसी भी प्रकार की आपत्ति या एन्क्रिप्शन गेम के दौरान गेम डेटा को संशोधित करने के लिए उपयोग किए जा रहे डीबगर से आपके कोड की रक्षा नहीं करेगा। यदि गेमप्ले क्लाइंट पर होता है, तो इस प्रकार की धोखाधड़ी को रोकना अनिवार्य रूप से असंभव है। एक जावास्क्रिप्ट-सक्षम ब्राउज़र एक विश्वसनीय कंप्यूटिंग डिवाइस नहीं है।
MarkR

10

जैसा कि बाइट 56 ने कहा: "ग्राहक पर कभी भरोसा न करें", लेकिन:

कभी भी ग्राहक पर भरोसा न करना एक मूल्य पर आता है:
सर्वर पर खेले जाने वाले सभी खेल होने से आपके बुनियादी ढांचे की लागत बहुत बढ़ जाएगी।

यह मानते हुए कि अधिकांश खिलाड़ी धोखा नहीं देंगे
और शीर्ष हाईस्कोर थोड़े समय के बाद व्यवस्थित हो जाएगा और बहुत कुछ बदलना बंद कर देगा

एक बीच का रास्ता है।

गेम रिकॉर्ड करें (क्लाइंट पर)।
(खेल के प्रकार पर निर्भर करता है जो सुपर आसान हो सकता है (जैसे शतरंज) या थोड़ा जटिल (जैसे मल्टीप्लेयर एफपीएस),
लेकिन यह हमेशा संभव है।)

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

इस तरह आपको अधिकांश नाटकों के लिए किसी अतिरिक्त सर्वर साइड संसाधनों की आवश्यकता नहीं है,
लेकिन यह सुनिश्चित कर सकता है कि शीर्ष स्कोर मान्य हैं।


2
दूसरे शब्दों में, अगर वे शीर्ष स्कोर के अलावा किसी और चीज के लिए धोखा देते हैं, तो वे परवाह क्यों करते हैं (वे वैसे भी ऐसा क्यों करेंगे?) इसलिए वे ही हैं जिन्हें आपको मान्य करने की आवश्यकता है।
झॉकिंग

4

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

मैंने कई साल पहले ऐसा खेल लिखा था, और मेरी जानकारी के अनुसार, इस तरह से किसी ने धोखा नहीं दिया। पुरस्कार तालिका में आपका नाम होने के अलावा कोई पुरस्कार नहीं था।


4

सामाजिक लीडरबोर्ड का उपयोग करके धोखा देने के लिए सामाजिक प्रेरणा को कम करें (केवल धोखा देने से आप मुट्ठी भर दोस्तों को अच्छे लगते हैं, यह हर किसी के लिए खराब नहीं होता है)।

सर्वर पर सत्यापित करें। जोएल पोलोनी ने गेम डेवलपर 2012 सितंबर "स्केल योर ऑनलाइन गेम" में तकनीकों का अच्छा लेखन किया था


2

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

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


यहां तक ​​कि यह सब धोखा देने से नहीं रोकेगा - बस स्पष्ट रूप से "हाँ, मुझे कानूनी एक बाज़ीगर अंक मिला"। चूँकि किसी चीज़ को क्लाइंट को चलाना होता है, वे बिना किसी नियंत्रण के समाप्त हो जाते हैं। बहुत कम से कम, किसी भी ग्राहक - विशेष रूप से एक वेब ब्राउज़र - स्क्रिप्ट करने योग्य है।
cHao
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.