2009-11-02 6 views
24

मुझे 100% सुरक्षा के लिए असंभव पता है, लेकिन कुछ उच्च या जो उपयोगकर्ताओं के बहुमत के लिए काम करता है।अपने जावास्क्रिप्ट कोड को चोरी, कॉपी और देखे जाने से कैसे रोकें?

उदाहरण के लिए, मुझे ऐसी साइट का सामना करना पड़ा जहां वर्तमान पृष्ठ के स्रोत को देखने से कुछ भी वापस नहीं आया।

अन्य मामले में, तक पहुँचने या ब्राउज़र

http://gget.com/somesecret.js से .js फ़ाइलों में ही डाउनलोड करने के लिए कोशिश कर रहा है,

आप और सामान अनुप्रेषित होगा।

यदि आप अपने कोड को खराब करते हैं, तो इसे डीकोड करना बहुत मुश्किल होगा? यदि ऐसा है तो यह एक और अच्छा समाधान है (किस सॉफ्टवेयर की सिफारिश की जाती है)?

+2

मुझे नहीं पता कि obfuscated कोड आसानी से डिकोडेबल है, लेकिन Google जावास्क्रिप्ट को देखें, और इसे "चोरी" करने का प्रयास करें :) – Aif

+6

जैसा कि आपने कहा था, कोई 100% सुरक्षा नहीं है। मैं किसी ऐसे व्यक्ति से कहूंगा जो "चोरी" जेएस कोड के साथ कुछ भी सार्थक करने के लिए परिष्कृत है, यह भी आपके स्क्रिप्ट को छिपाने के लिए नियोजित किसी भी हाथ से चलने के लिए पर्याप्त परिष्कृत है। यानी, यह एक सुंदर व्यर्थ उपक्रम IMHO है। – deceze

+0

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

उत्तर

20

आप अपने जावास्क्रिप्ट को खराब कर सकते हैं। जंगली में ऐसा करने के लिए बहुत सारे उपकरण हैं, उदा। http://www.javascriptobfuscator.com/। हालांकि यह किसी को कोड देखने से नहीं रोकता है, लेकिन इसे पढ़ने में मुश्किल बनाता है।

5

विशेष रूप से आधुनिक ब्राउज़रों में, यह समय की पूरी बर्बादी है।

मैं फ़ायरबग का उपयोग somesecret.js को देखने के लिए कर सकता हूं ... जैसा कि आप नीचे स्क्रॉल करेंगे तो बेहतर होगा यदि आप स्रोत देखेंगे।

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

+0

कैसे मेरे कोड को कम करने और obfuscate करने के लिए? क्या कोई सॉफ्टवेयर है जिसका मैं उपयोग कर सकता हूं? एक वेब आधारित सुरक्षित है? मुझे पता है कि लोग फायरबग का उपयोग कर सकते हैं और सबकुछ देख सकते हैं .... लेकिन मैं इसे कठिन बनाना चाहता हूं। यह सही नहीं होगा लेकिन अगर मैं अधिकांश लोगों को बाहर रख सकता हूं तो यह काफी अच्छा होगा। – wghwh

+0

यूयूआई कंप्रेसर पर एक नज़र डालें, उदाहरण के लिए: http://developer.yahoo.com/yui/compressor/ – Jesper

2

ठीक है, अगर आपके पास सर्वर है, तो आप अपने स्वयं के होस्टनाम के अलावा अन्य लोगों से पहुंच से इंकार कर सकते हैं। अपाचे पर, आप इसे .htaccess के माध्यम से कर सकते हैं।

आप अपने उत्पादन जावास्क्रिप्ट कोड को पैक करने के लिए Dean Edwards' packer का भी उपयोग कर सकते हैं।

लेकिन ध्यान दें कि फायरबग या अन्य डिबगिंग टूल के साथ, अधिकांश लोग अभी भी डोम टैब/इंस्पेक्टर के माध्यम से अपना कोड देख सकते हैं।

43

यह संभव नहीं है।

किसी विज़िटर के ब्राउज़र के लिए स्क्रिप्ट निष्पादित करने में सक्षम होने के लिए, उन्हें इसे डाउनलोड करने में सक्षम होना चाहिए। कोई फर्क नहीं पड़ता कि आप जेएस, सर्वर अनुमतियों इत्यादि के साथ खींचने का प्रयास करते हैं, दिन के अंत में वे हमेशा wget http://example.com/yourcoolscript.js कर सकते हैं। और यहां तक ​​कि यदि वे नहीं कर सकते हैं (उदाहरण के लिए आपको उस अनुरोध के लिए "गुप्त" हेडर की आवश्यकता होती है) जो संभवत: अधिकतर ब्राउज़रों के व्यवहार को रोक देगा, जबकि किसी निर्धारित व्यक्ति को वैसे भी देखने से रोकना नहीं है।

मूल रूप से, क्योंकि जेएस क्लाइंट-साइड निष्पादित किया गया है, क्लाइंट को "मूल" जेएस फ़ाइल तक पहुंच होनी चाहिए।

एक मामूली चीज जो आप कर सकते हैं वह है obfuscation, जो थोड़ा सा मदद कर सकता है। लेकिन चूंकि जेएस का अर्थ है, यह भी अपने स्वयं के deobfuscator है - उदाहरण के लिए one of my earlier answers देखें।

मूल रूप से - "यदि आप इसे बनाते हैं, तो वे देखेंगे"। :-)

+6

ब्राउज़र और सर्वर के बीच कुछ टीसीपी/आईपी श्रोता रखना संभव है जिसके साथ आप HTML और जावास्क्रिप्ट देख सकते हैं यह उनके बीच संवाद है। तो "गुप्त शीर्षलेख" वास्तव में कोई अच्छा नहीं हैं। – Jesper

+0

@ जेस्पर ऐसे श्रोताओं पहले से मौजूद हैं और उपयोग करने में आसान हैं। एक कैशिंग वेब प्रॉक्सी (जैसे स्क्विड) या फिडलर जैसे http ट्रैफिक स्निफ़र सेट करें और आप जाने के लिए अच्छे हैं। – Wedge

+0

जेस्पर - मैं मानता हूं, यह व्यापक रूप से मेरा मतलब है "एक निर्धारित व्यक्ति को देखने से रोकना नहीं"। ब्राउज़र को सामान्य ऑपरेशन में फ़ाइल को देखने में सक्षम होना चाहिए, और फ़ाइल को स्वयं प्राप्त करने के लिए कोई भी ब्राउज़र की तरह पर्याप्त व्यवहार कर सकता है। –

5

अपना समय बर्बाद न करें। यदि कोई ब्राउज़र इसे चलाने के लिए डाउनलोड कर सकता है (और यह कर सकता है, अन्यथा कोड बेकार है), इसे डाउनलोड करने और इसे सहेजने के लिए एक प्रोग्राम लिखा जा सकता है।

समय और समय फिर से, हमने देखा है कि इस तरह की चीजों की रक्षा के लिए तकनीकी तरीके काम नहीं करते हैं।

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

यदि आपको वास्तव में कोड को देखने से बचाने की आवश्यकता है, तो इसे क्लाइंट साइड जेएस में न करें। इसे सर्वर पर रखें और उसके साथ संवाद करने के लिए बस जेएस का उपयोग करें।

30

दो प्रकार के उपयोगकर्ता हैं: एक बड़ा समूह है जो कम परवाह नहीं कर सकता है। उनके खिलाफ सुरक्षा की जरूरत नहीं है।

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

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

यदि आपको डर है कि आपके विचार चोरी होने जा रहे हैं, तो एक नई नौकरी की तलाश करें, क्योंकि वे होंगे और ऐसा कुछ भी नहीं है जो आप कर सकते हैं।

15

यदि आपके पास बड़े रहस्य हैं, तो उन्हें सर्वर पर रखें।

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

हम एक जेएस भारी ऐप बना रहे हैं और लंबे समय से इस परावर्तक को ठीक कर चुके हैं।
यदि तथ्य है, तो हमने विपरीत किया है।

जैसा कि कुछ भी संरक्षित नहीं किया जा सकता है, ओपन सोर्स उपयोगी हिस्सों क्यों नहीं खोलें और अन्य लोगों से प्रतिक्रिया प्राप्त न करें?
इसे आज़माएं, आप निराश नहीं होंगे।

6

एक विचार एक socket.listener के माध्यम से ब्राउज़र को जावास्क्रिप्ट फ़ाइलों की सेवा और eval साथ चलाने के लिए उपयोग WebSockets है। इस तरह, किसी को भी वास्तविक "स्रोत" देखने के लिए बहुत मुश्किल है, क्योंकि सॉकेट के कनेक्शन को पहले ही बंद कर दिया गया है।

http://samy.pl, के मुखपृष्ठ पर एक और अद्भुत रणनीति देखी जा सकती है जो जेएस कोड को छिपाने के लिए बाइट सिफर के रूप में रिक्त स्थान (\ u0020) और टैब (\ u0009) का उपयोग करता है!

आप स्रोत देखते हैं, तो आप केवल 1 लाइन वास्तविक जे एस कोड के देख सकते हैं: http://pastebin.com/e0pqJ8sB स्वयं देखें अगर आप पता लगा सकते हैं कि यह कैसे काम करता है (कोई विफल!)

जहाँ तक ऑबफस्केटर का सवाल है, http://utf-8.jp/public/jjencode.html (और/या एक और संस्करण)

यह नि: शुल्क अस्पष्टकर्ता रन क्लाइंट साइड, और निरर्थक शब्दों कि unminify.com और jsbeautifier भी डिकोड नहीं कर सकते हैं पैदा करता है देखें:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())(); 

मूल कोड: दोनों ख से

alert("Hello, JavaScript") 

आउटपुट eautifier वेबसाइटें:

$ = ~[]; 
$ = { 
    ___: ++$, 
    $$$$: (![] + "")[$], 
    __$: ++$, 
    $_$_: (![] + "")[$], 
    _$_: ++$, 
    $_$$: ({} + "")[$], 
    $$_$: ($[$] + "")[$], 
    _$$: ++$, 
    $$$_: (!"" + "")[$], 
    $__: ++$, 
    $_$: ++$, 
    $$__: ({} + "")[$], 
    $$_: ++$, 
    $$$: ++$, 
    $___: ++$, 
    $__$: ++$ 
}; 
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$; 
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$; 
$.$ = ($.___)[$.$_][$.$_]; 
$.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + "(\\\"\\" + $.__$ + $.__$ + $.___ + $.$$$_ + (![] + "")[$._$_] + (![] + "")[$._$_] + $._$ + ",\\" + $.$__ + $.___ + "\\" + $.__$ + $.__$ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $._$_ + $._$$ + $.$$__ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $.___ + $.__ + "\\\"\\" + $.$__ + $.___ + ")" + "\"")())(); 

आशा है कि यह ज़रूरत वाले लोगों को प्रबुद्ध करे!

+0

क्या मैं केवल eval के पास ब्रेकपॉइंट नहीं रख सकता, वैरिएबल के मूल्य की जांच कर रहा हूं जो इसे प्राप्त करने और जावास्क्रिप्ट प्राप्त करने का प्रयास कर रहा है? मुझे लगता है कि यह बदबूदार है ... – David

+1

मैं मूल्यांकन – Guillaume86

+0

हाँ से पहले कोड आउटपुट करने के लिए eval पैच होगा, लेकिन आप आउटपुट स्रोत उत्पन्न करने के लिए एक यादृच्छिक कोड obfuscator का उपयोग कर सकते हैं। फिर, हर बार एक ही अनुरोध किया जाता है, एक differente कोड outputed है। कुछ obfuscators, आप eval समारोह में उपयोग करने के लिए एक डिक्रिप्ट कुंजी का उपयोग कर सकते हैं। असंभव नहीं है। लेकिन बहुत मुश्किल है। –

0

अगर कोई आपके कोड को स्टील करता है तो आप उन्हें मुकदमा कर सकते हैं। आपका कोड कॉपीराइट संरक्षित है। आप एक उपन्यास के लेखक की तरह हैं। अगर किसी ने आपके ऐप या आपके कोड के किसी हिस्से को चुरा लिया तो वे चोरी के दोषी होंगे।

+3

"द अमेरिकन वे" ... – David

+1

यदि आप भारत में हैं तो असंभव है :) – Subhajit

+1

यह मुझे थिस्पेटबे कहानी की याद दिलाता है :) अगर पुलिस उन्हें नहीं मिल सकती है, तो मुझे आश्चर्य है कि वे कुछ "महत्वपूर्ण" वेबसाइट स्क्रिप्ट को पकड़ने के लिए कितना निवेश करेंगे। –

0

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

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