2011-12-30 7 views
12

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

मुझे एहसास हुआ कि, जब मैं अपना आवेदन चलाता हूं, क्लाइंट पक्ष पर, क्लाइंट पेज स्रोत (Ctrl + U) देखकर मेरा सभी स्रोत कोड देख सकता है।

मैं कुछ कैसे छुपा या कर सकता हूं ताकि उपयोगकर्ता स्रोत को समझ या पढ़ सके?

मैं कुछ ऐसा करना चाहता हूं जो फेसबुक करता है। फेसबुक स्रोत उपयोगकर्ता को देखकर इसका स्रोत कोड पुन: उपयोग नहीं किया जा सकता है या इसे समझ भी नहीं सकता है।

मैंने गुगल किया और पाया कि इस प्रक्रिया को obfuscation कहा जाता है, लेकिन यह मेरे लिए काम नहीं करता है।

http://www.javascriptobfuscator.com/default.aspx

और

http://dean.edwards.name/packer/

और

http://www.daftlogic.com/projects-online-javascript-obfuscator.htm

भी मैं करने की कोशिश की:

मैं इस कोशिश कीhttp://www.jasob.com/

लेकिन यह मेरे लिए कोई उपयोग नहीं है।

+0

आप ** ** फेसबुक और Google दोनों के लिए सभी क्लाइंट कोड देख सकते हैं। यह obfuscated है, जिसका अर्थ यह है कि इसे पढ़ने के लिए * कठिन * है, लेकिन असंभव नहीं है। लेकिन सबसे महत्वपूर्ण बात यह है कि आपने यह नहीं समझाया कि आपका मतलब क्या है "यह मेरे लिए कोई उपयोग नहीं है" *। इन obfuscators के साथ आप क्या वास्तविक समस्या का सामना कर रहे हैं? – Groo

+0

वास्तव में मुझे लगता है कि यह अभी छोटा है। हालांकि यह भी अपवित्रता है, यह इसका मुख्य उद्देश्य नहीं है। – ThiefMaster

+0

@ ग्रूओ: मतलब है कि मैंने अपनी जेएस फ़ाइल obfuscator की कोशिश की लेकिन यह मेरे आवेदन का परीक्षण करने में विफल रहा। यह क्लिक घटना पर कोई भी ऑपरेशन करने वाला नहीं है। क्या आप मुझे बता सकते हैं कि कौन सा obfuscator उपकरण मैं अपने जेएस obfuscate करने के लिए उपयोग करते हैं। – Bhargav

उत्तर

23

अगर कोई वास्तव में आपके कोड की परवाह करता है तो वह अन-खनन (वर्कुअल वेरिएबल/फ़ंक्शन नामों के साथ यादृच्छिक स्थानांतरित करने) का वर्कलोड लेगा। "एन्क्रिप्टिंग" या पैकिंग जैसी कुछ और चीज सिर्फ snake oil है क्योंकि इसे आसानी से वापस किया जा सकता है। तो अपने आप को कुछ काम बचाएं और अपने आवेदन को बेहतर बनाने के लिए इसे खर्च करें।

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

उदाहरण के लिए फेसबुक जेएस फाइलें केवल रास्ते से कम हो गई हैं - संभवतः केवल बैंडविड्थ/प्रदर्शन कारणों के लिए।


आपकी जावास्क्रिप्ट कम करें सबसे आसान तरीका है इसके लिए गूगल के वेब सेवा का उपयोग कर रहा है: http://closure-compiler.appspot.com/home
नोट यह एक 1 एमबी सीमा है इसलिए यदि आपके जेएस कि बहुत बड़ा है, तो आप जावा आधारित minifier डाउनलोड करने के लिए आवश्यकता हो सकती है इसे स्थानीय रूप से चलाने के लिए।

+0

हाँ आप सही हैं। क्या आप जेएस कोड को छोटा करने के लिए मुझे कोई उपकरण सुझा सकते हैं? – Bhargav

+0

मेरे उत्तर – ThiefMaster

+0

पर एक लिंक जोड़ा गया मैं जावा-आधारित minifier नहीं मिला। क्या कोई लिंक है? –

2

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

+0

हाँ आप सच हैं। मैं बस चाहता था कि मेरे जेएस को पहली बार पढ़ना मुश्किल हो। मैंने केवल सर्वर पर अपना तर्क लागू किया। मैं सिर्फ jquery द्वारा सर्वर नियंत्रक को उपयोगकर्ता डेटा स्थानांतरित कर देता हूं। मैं बस चाहता था कि उपयोगकर्ता यह भी नहीं जान सके कि पीछे की तरफ क्या चल रहा है। obfuscator का उपयोग करने के लिए मेरा उद्देश्य है। – Bhargav

+0

भले ही आप एक अपरिवर्तनीय तरीके से स्रोत को खराब कर दें (संभव नहीं) आधुनिक ग्राहक अभी भी उपयोगकर्ता को अपने क्लाइंट से नेटवर्क यातायात की निगरानी करने की अनुमति देते हैं। :/छुपाने के बारे में आप किस विशिष्ट कार्यक्षमता से चिंतित हैं? – RSG

+0

मैं अपनी जेएस फ़ाइल obfuscate के लिए जाना होगा। किसी भी संदर्भ का स्वागत किया। धन्यवाद... – Bhargav

0

जैसा कि मुझे अपने जावास्क्रिप्ट स्रोत कोड को कम करने की आवश्यकता है, मैं एक जावास्क्रिप्ट प्रोग्राम ढूंढ रहा हूं जिसका स्वयं कोई जावास्क्रिप्ट कोड छोटा हो।

क्यों जावास्क्रिप्ट मिनीफायर? क्योंकि, मैं वेब सर्वर से क्लाइंट को कुछ यादृच्छिक जावास्क्रिप्ट कोड लिख रहा हूं।

मुझे वेब सर्वर पर "node.js" का उपयोग जावास्क्रिप्ट प्रोग्राम निष्पादित करने के लिए करना चाहिए जो जावास्क्रिप्ट कोड उत्पन्न करता है और इसे फ्लाई पर छोटा करता है और इसे क्लाइंट को भेजता है।

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

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

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

मैं स्पष्ट किया कि प्रक्रिया है क्योंकि:

  1. आप जावास्क्रिप्ट स्रोत कोड में कहानियो के बारे में कुछ बातें लिया जाता है; लेकिन, जावास्क्रिप्ट में obfuscation अभी तक वेब सर्वर और ब्राउज़रों द्वारा लागू नहीं किया गया है ... शायद, यह हो सकता है ... लेकिन, इंटरनेट पर सभी संचरण "एसएसएल-ize" की मदद से किस प्रकार के समाधान उपयोगी हैं।

  2. एन्क्रिप्शन/डिक्रिप्शन फ़ंक्शन के साथ क्रिप्ट और डिक्रिप्ट करना संभव है जिसे पठनीय किया जा सकता है। और, एसएसएल प्रमाण पत्र की लागत के बिना। यहां तक ​​कि, "बीच में एक आदमी" एन्क्रिप्टेड डेटा डिक्रिप्ट करेगा; उसके लिए, उसे सिर्फ जावास्क्रिप्ट फ़ंक्शन निष्पादित करना होगा। ठीक है..लेकिन कल्पना करें कि जावास्क्रिप्ट डिक्रिप्शन फ़ंक्शन भी encypted है ... फिर, "बीच में आदमी" को डिक्रिप्शन फ़ंक्शन निष्पादित करना होगा और फिर एन्क्रिप्टेड सामग्री को डिक्रिप्ट करने के लिए जावास्क्रिप्ट फ़ंक्शन जो डिक्रिप्ट की गई सामग्री को फिर से डिक्रिप्ट करना होगा।

और, कल्पना करता है, तो वेब सर्वर क्लाइंट के लिए एक प्रश्न पूछता और अद्वितीय जवाब (जिसका इंटरनेट के माध्यम से नहीं भेजा गया) ... यह बीच में "करने के लिए आदमी असंभव है ग्राहक के परिणाम गणना द्वारा नियंत्रित किया जाता "जवाब देने के लिए।

मेरा विचार देखें; मैं किसी से टिप्पणी के लिए इंतजार कर रहा हूँ।

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

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