2010-11-15 5 views
22

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

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

+2

[एचटीएमएल, सीएसएस और जावास्क्रिप्ट को रोकने के लिए जावास्क्रिप्ट को कैसे एन्क्रिप्ट करना है] सहित कई पूर्व प्रश्नों के समान (http://stackoverflow.com/questions/3247270/how-to-encrypt-html-css-and-javascript- रोकने के लिए चोरी), [लोगों को मेरे स्रोत कोड की प्रतिलिपि बनाने से रोकने के कुछ अच्छे तरीके क्या हैं? ] (http://stackoverflow.com/questions/2562775/what-are-some-good-ways-to-prevent-people-from-copying-my-source-code), और [क्या सबसे अच्छा तरीका है एनकोड/एक जावास्क्रिप्ट-कोड की रक्षा?] (http://stackoverflow.com/questions/3904141/what-is-the-best-way-to-encode-protect-a-javascript-code)। –

उत्तर

18

नहीं, आप ऐसा नहीं कर सकते हैं।

सब कुछ ब्राउज़र (क्लाइंट) पर जा रहा है। आप उलझन में, कमजोर हो सकते हैं या इसके साथ क्या नहीं कर सकते हैं, लेकिन अंत में यह फिर से "एन्क्रिप्ट" करने के लिए एक आसान शॉट है।

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

8

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

+1

शायद वह समाधान होगा जिसे मैं एक्सप्लोर करने का निर्णय लेता हूं। – user161190

+0

एक फ़ाइल में अपने सभी जावास्क्रिप्ट होने पर भी प्रदर्शन के साथ-साथ कहानियो के लिए अच्छा है, शायद आप एम्बेड और jQuery की तरह एक आम, सुंदर inpenetrable जे एस पुस्तकालय के भीतर अपने कस्टम जे एस छुपा सकते है। यह असंभव है कि किसी को भी एहसास होगा। –

+1

@ एंड्रयू एम, आपको बस एहसास हुआ। –

11

आप बस ऐसा नहीं कर सकते हैं। एक मिनीमाइज़र के साथ अपने जावास्क्रिप्ट और सीएसएस को दबाकर शायद आप निकटतम हो सकते हैं।

+0

-1 यही कारण है कि सब पर मदद नहीं होता, वहाँ beautifiers कि कोड के रूप में जल्दी जानने के रूप में आप इसे अंधेरा कर सकता है। – Ben

+6

@Steve - हां, कम से कम पूर्ववत करने के लिए उपकरण हैं, लेकिन वे अभी भी कचरे से सार्थक कार्य और परिवर्तनीय नाम उत्पन्न नहीं करेंगे। तो कोड कुछ और पठनीय होगा, लेकिन अभी भी समझना मुश्किल है। –

5

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

Obfuscation आकस्मिक प्रयासों और जिज्ञासा-ब्राउज़िंग को रोक देगा, लेकिन एक निर्धारित हमलावर/ब्राउज़र को नहीं रोकेगा क्योंकि यह क्लाइंट-साइड पर लागू किया गया है।

3

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

33

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

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

आम तौर पर आपके आवेदन में मूल्य वास्तव में समर्थन क्षेत्र में होगा। दूसरे शब्दों में, अगर लोग महसूस करते हैं कि आप इसका समर्थन करने के लिए काफी देर तक होंगे, तो लोग इसे खरीद लेंगे। इसके बारे में जागरूक रहें क्योंकि आप इसकी कीमत रखते हैं।

आपको यह पता चल जाएगा कि कुछ ऐसे होंगे जो आपके कोड को चुरा लेंगे और इसका पुन: उपयोग करेंगे। उनके बारे में ज्यादा चिंता न करें क्योंकि वे वैसे भी ग्राहकों का भुगतान नहीं करेंगे। इसके बजाए, अपने ग्राहकों को अपनी सामग्री खरीदने और उपयोग करने में आसान बनाएं। सुनिश्चित करें कि आप समर्थन प्रदान करते हैं; यही वह जगह है जहां वास्तविक मूल्य आने वाला है।

+1

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

5

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

द्वारा प्राप्त किया जा सकता है कि:

  • SASS/LESS के माध्यम से कुछ ढांचे
  • अपने सीएसएस पैदा करने से अपने HTML पैदा करने, आदि
  • एक जावास्क्रिप्ट संकलक का उपयोग कर अपनी स्क्रिप्ट पर
  • (यानी गूगल की Closure Compiler)

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

29

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

  1. जेएस/एचटीएमएल/सीएसएस आमतौर पर पिछड़े इंजीनियर के लिए काफी आसान है, उन्हें आपके कोड को बिल्कुल देखने की आवश्यकता नहीं है।
  2. संभावना है, आपके जेएस इनोवेशन पहले से मौजूद हैं और 2001 में किसी और ने लिखा था।
  3. कोड जितना जटिल होगा, बौद्धिक संपदा चोरी करना कठिन होगा, खासकर यदि आप इसे खोलते हैं।

वास्तव करने के लिए कोई समझदार कारण अपने कोड जहां जे एस/सीएसएस/HTML का सवाल है की रक्षा के लिए, सबसे अच्छा आप कर सकते हैं बैकएंड पर कि रखकर अपने व्यापार तर्क की रक्षा है।

प्रधानमंत्री उदाहरण के लिए, मैं CKEditor के अपने खुद के कार्यान्वयन (बहुत से लोगों को तो बस यही काम) लिख सकता है लेकिन यह एक बहुत की एक बिल्ली आसान सिर्फ CKEditor का उपयोग करें और करने के लिए हर कोई जानता है कि यह क्या है है, जो इसे लिखा आदि

या उदाहरण के तौर पर Google नक्शे लेते हैं, वहां बहुत सारे क्लोन हैं, लेकिन केवल एक असली Google मानचित्र हैं। बिल्ली, दूसरों ने Google के सामने एक नक्शा कार्यान्वयन लिखा था, लेकिन Google नक्शे अधिक ज्ञात है।

मैं उदाहरण के बहुत सारे न केवल मूर्खतापूर्ण कारण है कि अपने कोड को बचाने की कोशिश के साथ जा सकते हैं, लेकिन वास्तव में स्मार्ट नहीं ... व्यापार तर्क की रक्षा एक बात है, लेकिन आप वास्तव में अधिक के साथ सार्वजनिक जा रहा द्वारा हासिल करने के लिए है फैंसी स्मेन्सी फ्रंटएंड कोड ...

2

मैंने इस समस्या के बारे में बहुत कुछ सोचा है और, स्पष्ट रूप से, ऐसा नहीं किया जा सकता है। सबसे अच्छा मैंने कभी भी जेएस कंपाइलर का उपयोग कर लिया है।

सैद्धांतिक रूप से, और मैं वास्तव में कभी ऐसा करने के बाद, लेकिन मैं यह है कि यह संभव है पता है, यह एक 1x1 पिक्सेल swf जो एक scrambler के माध्यम से भेजा बारी में था के माध्यम से अपने js लोड करने के लिए संभव हो सकता है। इसके आसपास जाना अभी भी संभव है, लेकिन यह दूर अधिक परेशान हो जाता है। फिर, आप एसईएफ के माध्यम से एएस एन्क्रिप्टेड कोड भेजने में सक्षम होंगे, इसे क्लाइंट साइड डिक्रिप्ट करें (as3crypt लाइब्रेरीज़ का उपयोग करके), और उसके बाद इसे ब्राउज़र पर लिखें। उस ने कहा, जब तक कि आप कॉलबैक की श्रृंखला के लिए एसएफएफ का उपयोग नहीं कर रहे थे, तब भी आपको इस तथ्य की समस्या होगी कि इसे अभी भी ब्राउज़र पर लिखा जाना चाहिए।फायरबग और अन्य ब्राउज़रों के जेएस कंसोल उपयोगकर्ता को "संकलित" जेएस प्राप्त करने देगा। बेशक, कॉलबैक की श्रृंखला पंजीकृत करने के लिए एएस 3 को स्क्रिप्ट करना संभव है ...

जैसा कि मैंने कहा है, यह अधिक से अधिक काल्पनिक नहीं है और मुझे इसमें कोई संदेह नहीं है कि यह idyllic परिस्थितियों में काम कर सकता है, फ्लैश सीमित है और आपको एएस 3 के ज्ञान की आवश्यकता होगी। लाभ, ज़ाहिर है कि यह ब्राउज़र के बिना जेएस प्राप्त करने का एक तरीका है जब उपयोगकर्ता आसानी से इसे पढ़ने में सक्षम नहीं होता है।

1

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

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

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