2012-09-19 14 views
5

द्वारा निष्पादित किए जाने से कोड को रोकना, इसलिए मैं जावास्क्रिप्ट के साथ एक गेम लिख रहा हूं, और इसके साथ सबसे बड़ी समस्या यह है कि जो भी इसे खेल रहा है, जो जेएस का सभ्य ज्ञान हो सकता है, मेरा स्रोत कोड खोल सकता है, पता लगा सकता है यह कैसे काम करता है, फिर कंसोल में game.score = 100000000000000; प्लग करें। हालांकि, ऐसा लगता है कि स्क्रिप्ट को obfuscating से अलग, एक अज्ञात समारोह में सब कुछ लपेटना चाल है।उपयोगकर्ता द्वारा

(function() { 
    game_start = function() { 
     //etc 
    } 
    //etc 
})(); 

जब मैं कोशिश करते हैं और क्रोम कंसोल से कोड के किसी भी चलाने के लिए, यह undefined के साथ आता है। यह वांछित परिणाम है, लेकिन क्या मेरी विधि के आसपास एक रास्ता है जो इसे बेकार प्रदान करेगा? या कंसोल से चीजों को चलाने के लिए भी एक बेहतर तरीका है?

+4

क्लाइंट-साइड कोड * कभी * वास्तव में अविनाशी नहीं बनाया जा सकता है। –

+4

और आप क्रोम में ब्रेकपॉइंट जोड़ सकते हैं और जो कुछ भी आप चाहते हैं उसे बदल सकते हैं। इसमें बहुत अधिक प्रयास करने से परेशान मत हो। सबसे अच्छा आप जिस साथ आने जा रहे हैं वह कोड को खराब/छोटा करना है ताकि इसे पढ़ना मुश्किल हो। uglifyjs –

+0

जैसे कुछ देखें, http://glackoverflow.com/a/11960187/453277 –

उत्तर

4

यह सुनिश्चित करने का कोई तरीका नहीं है कि वह व्यक्ति धोखा नहीं देगा। बुरी तरह से obfuscated कोड के साथ भी (मैं H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa) जैसी चीजों के बारे में बात कर रहा हूं) आप अभी भी यूआई परिवर्तन या नेटवर्क अनुरोध देख सकते हैं और वहां से इसका पता लगा सकते हैं।

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

हालांकि यह लोगों को ऐसी स्क्रिप्ट लिखने से नहीं रोकेगा जो उन AJAX कॉल करता है और इस तरह से यह स्कोर वैध बनाता है।

tl; dr: नहीं, यह सुनिश्चित करने का कोई तरीका नहीं है कि उपयोगकर्ता-पक्ष कोड से समझौता नहीं किया गया है।

+0

एक दिलचस्प समाधान की तरह लगता है। – Polyov

3

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

+0

या, कम से कम उस गेम तर्क को सर्वर-साइड सत्यापित करने की आवश्यकता है। – Brad

+0

मैं समझता हूं कि धोखाधड़ी को रोकने के लिए असंभव है, मैं बस सोच रहा था कि मैं कितना बड़ा रोडब्लॉक बना सकता हूं। – Polyov

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