आप अपने जावास्क्रिप्ट / HTML5 वेब गेम को कॉपी या परिवर्तित होने से कैसे रोक सकते हैं?


45

मैं जावास्क्रिप्ट और एचटीएमएल 5 का उपयोग करके बनाए गए गेम की योजना बनाने के बीच में हूं।

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

क्या किसी को भी जावास्क्रिप्ट पढ़ने से रोकने के लिए कुछ भी किया जा सकता है?

यदि नहीं, तो क्या ग्राहक के केवल जिम्मेदारियों के साथ सर्वर इनपुट पर सभी गेम प्रोसेसिंग होनी चाहिए और उपयोगकर्ता इनपुट और ड्राइंग ग्राफिक्स पर कब्जा करना चाहिए?


22
आप पिछले पैराग्राफ में राइट्स के बारे में पढ़ते हैं, बिजनेस ऐप्स के लिए इसका सही और गेम्स के लिए सही है, क्लाइंट को हमेशा शत्रुतापूर्ण मानते हैं।
रात्रि

4
यदि मैं इसे पढ़ सकता हूं, तो मेरे ब्राउज़र में पहले से ही एक प्रति है। फिर मैं इसे कहीं और सहेज भी सकता हूं। कुछ भी जिसे आप पढ़ने की अनुमति देते हैं, उसे भी कॉपी किया जा सकता है।
बर्गग्रीनडीके

जवाबों:


44

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

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


4
कोडिंग प्रथाओं के आधार पर, सर्वर पर सभी सामग्री के साथ ही समझौता किया जा सकता है। कोड को छोटा करने के लिए और केवल उन लोगों को बाधित करता है जो समय नहीं लेना चाहते हैं और तार्किक रूप से यह बताते हैं कि यह क्या कर रहा है। निचला रेखा है, यदि आपके कोड के बौद्धिक संपदा अधिकारों के बारे में आपकी चिंता है; इसे वेब पर न डालें।
जॉन

1
इसका मतलब यह नहीं है कि आपको छोटा नहीं होना चाहिए, जो आलसी लोगों को रोकती है। आप सर्वर पर अपने गेम लॉजिक को संसाधित करने का प्रयास कर सकते हैं और jax ऑब्जेक्ट्स को ajax के माध्यम से लौटा सकते हैं, लेकिन रिटर्न को अभी भी फायरबग के साथ देखा जा सकता है। अपने उत्पादन संस्करण को टालें, लेकिन अपने लिए एक भारी टिप्पणी संस्करण रखें (यह बनाए रखना कठिन बनाता है)। आप लोगों को रोकने के लिए चीजें कर सकते हैं, लेकिन यह कभी भी 100% सुरक्षित नहीं है।
जॉन

3
वास्तव में। विस्तारित कोड का प्रयास भी अधिक प्रयास नहीं करता है। jsbeautifier.org
जेम्स

@ जॉन कृपया ध्यान दें कि कभी-कभी आलसी लोगों को रोकना अप्रासंगिक है, क्योंकि एक बार चीटर दिखाई देने पर कुछ खेल बर्बाद हो जाते हैं, इसलिए यह प्रासंगिक नहीं है यदि केवल एक या कई लोग धोखा दे रहे हैं।
ओ ० '।

11

आप वेब सर्वर से जावास्क्रिप्ट को कॉपी करने से किसी को कैसे रोक सकते हैं और या तो इसके साथ अपना गेम बना सकते हैं (मेरी सबसे बड़ी चिंता नहीं)

यह वह जगह है जहाँ कानून मदद करता है। व्यवहार में यह बहुत बार नहीं होता है।

या अपने स्वयं के जावास्क्रिप्ट फ़ंक्शंस को प्रतिस्थापित करने और गेम में अंततः विश्वसनीय मल्टीप्लेयर का समर्थन करने के लिए जंगली में विश्वसनीय ग्राहकों के लिए किसी भी उम्मीद को धूमिल करना।

इस तरह के कारण के लिए, जंगली में कोई विश्वसनीय ग्राहक नहीं हैं। अब इस सपने को छोड़ दो। :)


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

उत्तर की मंशा कानूनी कार्रवाई की सिफारिश करने के लिए इतनी नहीं थी, लेकिन यह सुझाव देने के लिए कि इस तरह के सॉफ़्टवेयर को लॉक करने की कोशिश करना ज्यादातर व्यर्थ है, कम से कम भाग में क्योंकि बहुत से लोग जो इसे कॉपी करेंगे, वे कानून द्वारा हतोत्साहित होंगे, बल्कि इसलिए भी क्योंकि ग्राहक वे रिवर्स इंजीनियर हो सकते हैं चाहे वे जावास्क्रिप्ट का उपयोग करें या नहीं।
काइलोटन

8

जैसा कि बाकी सभी ने सिफारिश की है; सर्वर-साइड जितना संभव हो उतना कोड रखें।

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

  • सर्वर-साइड, अद्वितीय आईडी जनरेट करें और इसे बाद के लिए संग्रहीत करें।
  • सर्वर-साइड, html रेंडरिंग के दौरान स्क्रिप्ट एलिमेंट में यूनीक आईडी जोड़ते हैं।
  • क्लाइंट-साइड, एक WebSocket कनेक्शन बनाएं और सर्वर को यूनीक आईडी पास करें।
  • सर्वर-साइड, वर्तमान सूची के खिलाफ आईडी मिलान।
  • यदि मैच नहीं मिला है, तो कनेक्शन बंद करें।
  • यदि मिलान पाया जाता है, तो संदेश हैंडलर को अपने "उचित" के साथ बदलें और आईडी को छोड़ दें।
  • JSON, {"func": "function () {dostuff ();}" के रूप में क्लाइंट के लिए अपना गुप्त कोड स्ट्रीम करें
  • क्लाइंट-साइड, संदेशों के लिए देखें, यदि उनमें "फ़ंक" होता है, तो उसे निकाल दें।

अब आपका गुप्त कोड क्लाइंट-साइड निष्पादित कर रहा है और व्यू-सोर्स या इंस्पेक्टर / कंसोल में दिखाई नहीं देगा। कोड पर अभी भी कई तरीके हैं, लेकिन यह थोड़ा अधिक कठिन है।


अगर मुझे उपरोक्त समाधान से कुछ हड़पने की जरूरत है; मैं सच्चे WebSocket को भी कनेक्ट करूंगा और "नकली क्लाइंट" बनाने की कोशिश करूंगा, या ब्राउजर में फायरबग डीबगिंग टूल का उपयोग करूंगा और मूल्यों की जांच करने के लिए स्क्रिप्ट को रोक दूंगा।
BerggreenDK

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

एक नकली ग्राहक लिखना बहुत आसान होगा जो वास्तविक ग्राहक को सर्वर से लोड करता है और हर बार चालू होने के बाद से वर्तमान गुप्त मूल्य को स्क्रैप करता है।
पॉल लेगाटो

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

3

आपके गेम कोड के सुरक्षित होने का एकमात्र तरीका यह है कि आप क्लाइंट / सर्वर प्रकार के गेम का निर्माण करें और सर्वर पर उतना ही कोड डालें जितना आप कर सकते हैं। और हां, उस सर्वर को सुरक्षित बनाएं!

मुख्य मुद्दा यह है कि अगर कोड मेरे कंप्यूटर पर चल रहा है, तो मैं इसका निरीक्षण कर सकता हूं, इसे विघटित कर सकता हूं और यह पता लगा सकता हूं कि यह कैसे काम करता है। यह जावास्क्रिप्ट, फ्लैश, सी ++, कुछ और के लिए सच है। वास्तव में, MMO के विकास में (जो कि मेरे पेशेवर अनुभव का थोक है) शुरू से ही धारणा यह है कि ग्राहक से समझौता किया जाता है: आपने ग्राहक के लिए जो कुछ भी लिखा है वह पहले से ही है जो कोई भी इसे चाहता है, दुर्भावनापूर्ण या नहीं।

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

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


मैं केवल यह बताना चाहता हूं कि C ++ जावास्क्रिप्ट के समान स्तर पर नहीं है। सी ++ विधानसभा के लिए संकलित करता है, जिसे किसी गेम के तर्क को समझने के लिए किसी को पढ़ने की आवश्यकता होती है। C ++ में प्रत्येक कथन असेंबली में कई लाइनें बना सकता है, जो इसे बहुत समय लेने वाला कार्य बनाता है। जावास्क्रिप्ट को ओबसुसेटिंग करना समान नहीं है, क्योंकि इसकी भाषा समान है। कोई भी इसे "सुशोभित" कर सकता है और लगभग मानव-पठनीय कथन पढ़ना शुरू कर सकता है।
टॉमटैग

3

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


यह इसके लायक है, लेकिन यह बहुत ज्यादा नहीं है। बौद्धिक संपदा की अवधारणा व्यवहार में है जो कई देशों में मान्यता प्राप्त नहीं है, और किसी भी मामले में अदालत के मामले की कानूनी लागत इस साइट से एक पोस्टर उपलब्ध होने से बहुत दूर है, खासकर अगर हमलावर किसी अन्य देश में है।
पॉल लेगाटो

0

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


-1

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

आज अधिकांश वेब एप्लिकेशन में जावास्क्रिप्ट की एक महत्वपूर्ण मात्रा होती है और अपने आईपी को सुरक्षित रखने के लिए इन जैसे टूल का उपयोग करते हैं। जैसा कि दूसरों ने कहा है कि आपको हमेशा पूछना चाहिए, "क्या मैं सर्वर पर ऐसा कर सकता हूं?" महत्वपूर्ण या संवेदनशील कार्यों के लिए, लेकिन मेरा मानना ​​है कि यह कुछ सुरक्षा प्रदान करना चाहिए।


7
अस्पष्टता से सुरक्षा, सुरक्षा की क्षमता को अस्पष्ट करती है। :)
रुशियो सेप

1
ओह कृपया। मैं इस उद्धरण को हर समय सुनता हूं लेकिन यह बिल्कुल सच नहीं है। सत्य कहा जाए कि जेएस को कम से कम कुछ लोगों को नजरअंदाज करना चाहिए।

2
minifier उसकी मदद नहीं करता है। मेरा मानना ​​है कि अधिकांश "गंभीर" लोग उन लिपियों को फिर से "विस्तारित" करना जानते हैं।
बर्गग्रीनडीके

1
@ शेरगियो: आप इस उद्धरण को हर समय सुनते हैं क्योंकि, आप जानते हैं, यह सच है । यह "कुछ" लोगों को रोक देगा, सच है, लेकिन "कुछ" लोगों को रोकना व्यर्थ है: जब आपको एक बार फटा जाता है , तो आप नीचे जाते हैं।
ओ ० '।

-1

Google क्लोजर कंपाइलर का उपयोग करें http://code.google.com/closure/compiler/ यह सिर्फ एक जेएस मिनिमाइज़र नहीं है;)

क्लोजर कंपाइलर का उपयोग करने के क्या फायदे हैं?

  1. दक्षता। क्लोजर कंपाइलर आपकी जावास्क्रिप्ट फ़ाइलों के आकार को कम करता है और उन्हें अधिक कुशल बनाता है, जिससे आपके एप्लिकेशन को तेज़ी से लोड करने और आपकी बैंडविड्थ आवश्यकताओं को कम करने में मदद मिलती है।

  2. कोड की जाँच। क्लोजर कंपाइलर अवैध जावास्क्रिप्ट के लिए चेतावनी देता है और संभावित खतरनाक संचालन के लिए चेतावनी देता है, जिससे आपको जावास्क्रिप्ट का उत्पादन करने में मदद मिलती है जो कम बगिया है और बनाए रखने में आसान है। 1।


-1

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


2
-1 ऑबफ्यूजेशन केवल इतना आगे जाएगा। यह निश्चित रूप से गेम को कॉपी या परिवर्तित होने से नहीं बचाएगा - जैसा कि इस प्रश्न के अन्य आक्षेप जवाबों पर उल्लेख किया गया है।
doppelgreener

-1

कुछ भी स्वामित्व को सर्वर-साइड रखा जाना चाहिए। ग्राहक पक्ष आप केवल इसके लिए पर्याप्त प्रदान करते हैं ताकि खेल के उपयोग को सुविधाजनक बनाया जा सके।


-1

सर्वर पर सब कुछ डालने से प्रदर्शन समस्या हो सकती है और वास्तव में वेब की सभी संभावनाओं का उपयोग नहीं कर सकता जैसा कि हम आज जानते हैं।

आप अपना कोड c ++ में लिख सकते हैं और इसे बायनेरिज़ पर संकलित कर सकते हैं।

मूल ग्राहक (NaCl)।

Https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser देखें


GDSE में आपका स्वागत है। ओपी विशेष रूप से जावास्क्रिप्ट के बारे में पूछ रहा है; इसलिए जब तक वे शायद C ++ को फिर से लिख सकते हैं और NaCl का उपयोग कर सकते हैं, वह समाधान वास्तव में बताई गई आवश्यकताओं को पूरा नहीं करता है। इसके अलावा, उत्तर यथासंभव स्व-निहित होने चाहिए - NaCl का उल्लेख करना और लिंक को डंप करना उतना अच्छा नहीं है जितना कि NaCl क्या है या यह क्यों मदद कर सकता है।
पिकालेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.